Comment analyser la liste des objets JSON entouré par [] à l'aide de Rénovation et de GSON?

J'ai créé un simple point de terminaison REST:

http://<server_address>:3000/sizes

Cette URL renvoie une réponse très simple contenant un tableau json comme suit:

[
  { "id": 1, "name": "Small", "active": true },
  { "id": 2, "name": "Medium", "active": true },
  { "id": 3, "name": "Large", "active": true }
]

Maintenant, je suis en train de consommer cette réponse à l'aide de Rénovation 2 avec GSON.

J'ai ajouté un modèle:

@lombok.AllArgsConstructor
@lombok.EqualsAndHashCode
@lombok.ToString
public class Size {
    private int id;
    private String name;
    private boolean active;

    @SerializedName("created_at")
    private String createdAt;

    @SerializedName("updated_at")
    private String updatedAt;
}

Et de service:

public interface Service {
    @GET("sizes")
    Call<List<Size>> loadSizes();
}

J'ai instancié un Retrofit:

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("http://<server_address>:3000")
    .addConverterFactory(GsonConverterFactory.create())
    .build();

Et mon service:

Service service = retrofit.create(Service.class);

Maintenant, essayez d'appeler les données:

service.loadSizes().enqueue(new Callback<List<Size>>() {
    @Override
    public void onResponse(Call<List<Size>> call, Response<List<Size>> response) {
        for(Size size: response.body()) {
            System.out.println(size.toString());
        }
    }

    @Override
    public void onFailure(Call<List<Size>> call, Throwable t) {
        System.out.println(t.getMessage());
    }
});

Ce qui finit avec une exception:

java.lang.IllegalStateException: Devrait BEGIN_OBJECT mais a CHAÎNE à la ligne 1 de la colonne 18 chemin de $[0].nom

Je suppose que l'erreur est causée par le REST API renvoie une réponse qui est un tableau, ni objet.

  1. Suis-je la corriger?
  2. Quelle est la meilleure façon de faire que ce code fonctionne?

RESTE le service ne peut pas être modifié, de sorte que la réponse doit rester comme il est.

Aussi, de la désérialisation de la ci-dessus json à l'aide de pure GSON peut être fait par:

Type sizesType = new TypeToken<List<Size>>(){}.getType();
List<Size> size = new Gson().fromJson(json, sizesType);

Mais je n'ai aucune idée de comment faire Rénover 2 pour l'utiliser.

Merci d'avance.

  • Avez-vous essayé sans lombok annotations? Peut-être qu'ils sont en quelque sorte faire GSON pensent que le nom est un objet, pas une chaîne de caractères?
  • Oui, j'ai essayé. Pas de changement, même erreur.