J'utilise la simulation pour mes appels de repos. Malheureusement, l'une des réponses que je reçois ressemble à ceci:

{
    "customer-id" : "0123"
}

La réponse JSON est automatiquement mappée sur l'un de mes POJO. Cet objet de réponse ne peut pas avoir de champ de propriété avec le nom "customer-id", car le tiret (-) n'est pas autorisé dans le nom d'un identifiant.

J'ai essayé ce qui suit:

public class LookUpAccountsResponse {
        @JsonProperty("customer-id")
        private String customerId;
}

Mais malheureusement, cela ne fonctionne pas. Quelqu'un a-t-il une suggestion sur la façon de résoudre ce problème?

6
Robert van der Spek 21 avril 2017 à 10:49

3 réponses

Meilleure réponse

com.google.gson.GsonDecoder

Je ne sais pas pourquoi JsonProperty se trouve sur votre chemin de classe, mais consultez la rubrique "Prise en charge de la dénomination des champs" https://github.com/google/gson/blob/master/UserGuide.md#json-field-naming-support

@SerializedName est l'annotation Gson dont vous aurez besoin

Ou passez entièrement à l'utilisation de la dépendance feign-jackson avec un JacksonDecoder

5
OneCricketeer 21 avril 2017 à 08:21

Ça fonctionne bien. Voici un exemple minimal:

  public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
    SomeClass sc = new ObjectMapper().readValue("{\"property-with-dash\": 5}", SomeClass.class);

    System.out.println(sc.propertyWithDash);
  }

  public static class SomeClass {
    @JsonProperty("property-with-dash")
    private int propertyWithDash;
  }

Cela imprime 5 comme prévu. Aucune plainte.

3
john16384 21 avril 2017 à 07:59

L'utilisation de JsonObjects et JsonArrays vous permettra d'obtenir des clés et des valeurs sous forme de chaînes

0
codehacker 21 avril 2017 à 09:49