Как разобрать JSON и установить в качестве объектной модели - PullRequest
0 голосов
/ 26 июня 2019

У меня есть API с 2 различными ответами:

ответ OK

{ "name": "test" }

ответ KO

[
    {
        "name_1": "test",
        "name_2": "test"
    }
]

проблема в том, что при использовании Retrofit, как правило, яиспользуйте модель для анализа результатов, но у ответа KO нет имени массива.

Как я могу создать модель?(Я не могу изменить API)

1 Ответ

1 голос
/ 26 июня 2019

Итак, чтобы добавить еще одно 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();


...