Extração de JSON aninhado com um conversor Gson personalizado no Retrofit
Muitas APIs fornecem respostas com uma estrutura JSON comum onde um objeto raiz abrange um objeto aninhado Campo "content" contendo os dados desejados. No entanto, a maioria dos POJOs modelam apenas os dados dentro do campo "conteúdo", deixando o adaptador do tipo retrofit incapaz de extrair e retornar o objeto apropriado.
Para resolver isso, um desserializador Gson personalizado pode ser desenvolvido para extrair o " content" e retornar o objeto incorporado. Veja como:
Desserializador personalizado:
Crie uma classe implementando a interface JsonDeserializer para o tipo de POJO desejado. Por exemplo, para um POJO de "Conteúdo":
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); } }
Configuração Gson:
Registre o desserializador personalizado com uma instância GsonBuilder:
Gson gson = new GsonBuilder() .registerTypeAdapter(Content.class, new ContentDeserializer()) .create();
Esta instância Gson agora pode ser usada para desserializar respostas JSON diretamente para o objeto "Conteúdo" incorporado.
Retrofit Integration:
Finalmente, use o conversor Gson personalizado ao criar a instância Retrofit:
Retrofit retrofit = new Retrofit.Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create(gson)) .build();
Agora, quando o Retrofit desseriaizar as respostas da API, ele usará o conversor personalizado para extrair apenas o campo "content" e retornar o tipo POJO apropriado.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3