Extrahieren von verschachteltem JSON mit einem benutzerdefinierten Gson-Konverter in Retrofit
Viele APIs stellen Antworten mit einer gemeinsamen JSON-Struktur bereit, bei der ein Stammobjekt ein verschachteltes Objekt umfasst Feld „Inhalt“ mit den gewünschten Daten. Allerdings modellieren die meisten POJOs nur die Daten innerhalb des Felds „Inhalt“, sodass der Retrofit-Typ-Adapter nicht in der Lage ist, das entsprechende Objekt zu extrahieren und zurückzugeben.
Um dieses Problem zu beheben, kann ein benutzerdefinierter Gson-Deserialisierer entwickelt werden, um das „ „Content“-Feld und gibt das eingebettete Objekt zurück. So geht's:
Benutzerdefinierter Deserializer:
Erstellen Sie eine Klasse, die die JsonDeserializer-Schnittstelle für den gewünschten POJO-Typ implementiert. Für ein „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-Konfiguration:
Registrieren Sie den benutzerdefinierten Deserializer bei einer GsonBuilder-Instanz:
Gson gson = new GsonBuilder() .registerTypeAdapter(Content.class, new ContentDeserializer()) .create();
Diese Gson-Instanz kann jetzt verwendet werden, um JSON-Antworten direkt an das eingebettete „Content“-Objekt zu deserialisieren.
Retrofit-Integration:
Verwenden Sie schließlich den benutzerdefinierten Gson-Konverter, wenn Sie die Retrofit-Instanz erstellen:
Retrofit retrofit = new Retrofit.Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create(gson)) .build();
Wenn Retrofit nun API-Antworten deserialisiert, verwendet es den benutzerdefinierten Konverter, um nur das Feld „Inhalt“ zu extrahieren und den entsprechenden POJO-Typ zurückzugeben.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3