Извлечение вложенного JSON с помощью пользовательского конвертера Gson при модернизации
Многие API предоставляют ответы с общей структурой JSON, где корневой объект включает вложенный Поле «content», содержащее нужные данные. Однако большинство POJO моделируют только данные в поле «контент», в результате чего адаптер модифицированного типа не может извлечь и вернуть соответствующий объект.
Для решения этой проблемы можно разработать специальный десериализатор Gson для извлечения " content» и вернуть внедренный объект. Вот как это сделать:
Пользовательский десериализатор:
Создайте класс, реализующий интерфейс JsonDeserializer для нужного типа POJO. Например, для POJO «Содержимое»:
class ContentDeserializer implements JsonDeserializer{ @Override public Content deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) throws JsonParseException { // Extract the "content" element JsonElement content = je.getAsJsonObject().get("content"); // Deserialize the content using a new Gson instance return new Gson().fromJson(content, Content.class); } }
Конфигурация Gson:
Зарегистрируйте пользовательский десериализатор с помощью экземпляра GsonBuilder:
Gson gson = new GsonBuilder() .registerTypeAdapter(Content.class, new ContentDeserializer()) .create();
Этот экземпляр Gson теперь можно использовать для десериализации ответов JSON непосредственно во встроенный объект «Содержимое».
Модернизация интеграции:
Наконец, используйте пользовательский конвертер Gson при создании экземпляра Retrofit:
Retrofit retrofit = new Retrofit.Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create(gson)) .build();
Теперь, когда Retrofit десериализует ответы API, он будет использовать собственный преобразователь для извлечения только поля «content» и возврата соответствующего типа POJO.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3