我有一个具有2种不同响应的API:
响应正常
{ "name": "test" }
响应KO
[
{
"name_1": "test",
"name_2": "test"
}
]
问题是通常使用Retrofit,我使用模型来解析结果,但响应KO没有数组名称。
如何创建模型? (我无法更改API)
答案 0 :(得分:1)
因此,要添加另一个POJO,您可以执行以下操作:
private static Gson gson = new GsonBuilder()
.registerTypeAdapter(Model1.class, new GsonDeserializer<Model1>())
.registerTypeAdapter(Model2.class, new GsonDeserializer<Model2>())
//or create a POJO for the names array of Model2
.registerTypeAdapter(Model2.class, new GsonDeserializer<Names>())
GsonDeserializer
是可以定义的自定义序列化程序,例如:
public class GsonDeserializer<T> implements JsonDeserializer<T> {
@Override
public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonObject el = json.getAsJsonObject();
return new Gson().fromJson(el, typeOfT);
}
然后在Retrofit客户中,只需添加:
retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson))
.build();