今天在套接口,后台返回的是数组,我用Gson.fromJson()进行解析
public static <T> List<T> stringToArray(String s, Class<T[]> clazz) {
T[] arr = new Gson().fromJson(s, clazz);
return Arrays.asList(arr);
}
原本以为so easy,接口调通后,NM
实体类中参数想写成“0”,咋办?本来想让后台改改,最后注解解决了问题。()
@SerializedName("2")
private String aa ;通过注解,“2”的赋值就到了aa属性上
同理,如果实体类转换成json字符串时,aa生成“2”
这样就解决了Java对象中的属性名和json字段名不匹配的问题了
该快去补补注解的知识,哈哈
在Gosn中的ReflectiveTypeAdapterFactory找到这个方法
/** first element holds the default name */
static List<String> getFieldName(FieldNamingStrategy fieldNamingPolicy, Field f) {
SerializedName serializedName = f.getAnnotation(SerializedName.class);
List<String> fieldNames = new LinkedList<String>();
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",不形象,换掉)