今天在套接口液走,后臺返回的是數(shù)組,我用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贾陷,接口調(diào)通后育灸,NM
實體類中參數(shù)想寫成“0”,咋辦昵宇?本來想讓后臺改改,最后注解解決了問題儿子。()
@SerializedName("2")
private String aa ;通過注解瓦哎,“2”的賦值就到了aa屬性上
同理,如果實體類轉(zhuǎn)換成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;
這樣在解析的時候就能轉(zhuǎn)換成注解標示的字段名犯助,我們?nèi)≈悼梢詆etName();
例如返回圖片的url,為了好理解我們寫成String imgUrl维咸,不用管后臺接口返回什么值了("url",不形象剂买,換掉)