在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