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?
3 réponses
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
Ç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.
L'utilisation de JsonObjects et JsonArrays vous permettra d'obtenir des clés et des valeurs sous forme de chaînes
Questions connexes
De nouvelles questions
java
Java est un langage de programmation de haut niveau. Utilisez cette balise lorsque vous rencontrez des problèmes pour utiliser ou comprendre la langue elle-même. Cette balise est rarement utilisée seule et est le plus souvent utilisée en conjonction avec [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] et [maven].