我正在使用Retrofit来请求API,但我的响应有问题。当属性为空时,它返回[]
,否则返回Map<String, MyObject>
。在两种情况下,如何解析对Object
的响应?
答案 0 :(得分:1)
快速型适配器可以解决这个问题。例如,
class EmptyArrayAdapter<T> implements JsonDeserializer<T> {
@Override
public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext jsc) throws JsonParseException {
if (json.isJsonArray()) {
// It is an array instead of a Map,
// Return an empty object (could also just return null)
return jsc.deserialize(new JsonObject(), typeOfT);
} else {
return jsc.deserialize(json, typeOfT);
}
}
}
注意,由于此适配器使用的jsc.deserialize
类型与传递的类型相同,因此您必须通过字段上的@JsonAdapter
注释使用它 -
class MyObject {
@JsonAdapter(EmptyArrayAdapter.class)
Map<String, SomeObj> myField;
}