注解在Gson中的应用

今天在套接口,后台返回的是数组,我用Gson.fromJson()进行解析

public static  List stringToArray(String s, Class clazz) {
        T[] arr = new Gson().fromJson(s, clazz);
        return Arrays.asList(arr);
    }

原本以为so easy,接口调通后,NM


注解在Gson中的应用_第1张图片
QQ图片20170607204757.png

实体类中参数想写成“0”,咋办?本来想让后台改改,最后注解解决了问题。()

  @SerializedName("2")
    private String aa ;通过注解,“2”的赋值就到了aa属性上
                                同理,如果实体类转换成json字符串时,aa生成“2”
     这样就解决了Java对象中的属性名和json字段名不匹配的问题了

该快去补补注解的知识,哈哈
在Gosn中的ReflectiveTypeAdapterFactory找到这个方法


  /** first element holds the default name */
  static List getFieldName(FieldNamingStrategy fieldNamingPolicy, Field f) {
    SerializedName serializedName = f.getAnnotation(SerializedName.class);
    List fieldNames = new LinkedList();
    if (serializedName == null) {
    //平时不加注解时,返回这个
      fieldNames.add(fieldNamingPolicy.translateName(f));
            } else {
    //当注解不为null时,取到注解的value
      fieldNames.add(serializedName.value());
      for (String alternate : serializedName.alternate()) {
        fieldNames.add(alternate);
      }
    }
    return fieldNames;
  }

再看看SerializedName注解类的源码

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
public @interface SerializedName {

  /**
   * @return the desired name of the field when it is serialized or deserialized
   */
  String value(); //用到这个方法
  /**
   * @return the alternative names of the field when it is deserialized
   */
  String[] alternate() default {};

当我们的Java对象这样写的时候

@SerializedName("XXX")
private String name;
这样在解析的时候就能转换成注解标示的字段名,我们取值可以getName();
例如返回图片的url,为了好理解我们写成String imgUrl,不用管后台接口返回什么值了("url",不形象,换掉)

你可能感兴趣的:(注解在Gson中的应用)