Personnalisation du convertisseur GSON Retrofit pour récupérer des objets JSON imbriqués
Lors de la consommation d'API qui intègrent les données souhaitées dans des structures JSON imbriquées, en tirant parti de GSON avec Retrofit peut être un défi. Cette question explore une solution pour extraire l'objet de contenu spécifique d'une réponse API imbriquée.
La réponse JSON en question suit un modèle dans lequel les données dont vous avez besoin sont placées dans un champ « contenu ». Le but est de créer un convertisseur GSON qui récupère directement ce contenu, sans tenir compte des couches externes.
Solution : Créer un désérialiseur personnalisé
La solution s'articule autour de la création d'un désérialiseur personnalisé désérialiseur qui se concentre sur l’extraction de l’objet incorporé. Le désérialiseur remplace la méthode "deserialize" et effectue les étapes suivantes :
Enregistrement du désérialiseur et création de Gson
Pour rendre le désérialiseur personnalisé disponible pour Retrofit, il doit être enregistré à l'aide de GsonBuilder. Enregistrez une instance distincte pour chaque type que vous rencontrez avec du JSON imbriqué. L'instance Gson résultante peut ensuite être utilisée dans le client Retrofit.
Exemple de mise en œuvre
class MyDeserializer<T> implements JsonDeserializer<T> { @Override public T deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) throws JsonParseException { JsonElement content = je.getAsJsonObject().get("content"); return new Gson().fromJson(content, type); } } Gson gson = new GsonBuilder() .registerTypeAdapter(Content.class, new MyDeserializer<Content>()) .registerTypeAdapter(DiffContent.class, new MyDeserializer<DiffContent>()) .create(); Retrofit retrofit = new Retrofit.Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create(gson)) .build();
En adoptant cette approche, votre client Retrofit peut désérialiser de manière transparente les données souhaitées. objets, même lorsqu'ils sont profondément imbriqués dans la réponse de l'API.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!