在 Retrofit 中使用自定义 Gson 转换器提取嵌套 JSON
许多 API 提供具有通用 JSON 结构的响应,其中根对象包含嵌套对象包含所需数据的“内容”字段。然而,大多数 POJO 只对“内容”字段中的数据进行建模,使得改造类型适配器无法提取并返回适当的对象。
为了解决这个问题,可以开发一个自定义的 Gson 反序列化器来提取“ content”字段并返回嵌入的对象。具体方法如下:
自定义反序列化器:
创建一个类,实现所需 POJO 类型的 JsonDeserializer 接口。例如,对于“Content”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 响应直接反序列化到嵌入的“Content”对象。
改造集成:
最后,创建Retrofit实例时使用自定义的Gson转换器:
Retrofit retrofit = new Retrofit.Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create(gson)) .build();
现在,当Retrofit反序列化API响应时,它将使用自定义转换器仅提取“内容”字段并返回适当的POJO类型。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3