Je récupère une chaîne JSON sur Internet; comme la plupart des JSON que j'ai vu, il comprend de longues clés séparées par des traits de soulignement. Essentiellement, mon objectif est de désérialiser JSON en objets java, mais je n'utilise pas de traits de soulignement dans le code java.
Par exemple, je pourrais avoir une User
classe avec un firstName
champ dans camel-case, en même temps, j'ai besoin de dire à Jackson de mapper la first_name
clé de JSON au firstName
champ de classe. C'est possible?
class User{
protected String firstName;
protected String getFirstName(){return firstName;}
}
Vous pouvez configurer le
ObjectMapper
pour convertir la casse du chameau en noms avec un trait de soulignement:Ou annotez une classe de modèle spécifique avec cette annotation:
Avant Jackson 2.7, la constante était nommée:
la source
@JsonProperty
(nom déduit descamelCase
propriétés Java normales ), laPropertyNamingStrategy.SNAKE_CASE
désérialisation a cessé de fonctionner avec camelCase JSON (comme je l'avais utilisé) et nécessite snake_case.Si c'est une application de démarrage à ressort, dans le fichier application.properties, utilisez simplement
Ou Annotez la classe de modèle avec cette annotation.
la source
spring.jackson.property-naming-strategy=SNAKE_CASE
ne fonctionne pas, j'utilise Spring Boot 2.0ObjectMapper
n'est pas créé par Spring? Créez une classe @Configuration avec une méthode @Bean qui renvoie un ObjectMapper. Je ne sais pas si cela est nécessaire.Si vous le souhaitez pour une classe unique, vous pouvez utiliser PropertyNamingStrategy avec @JsonNaming , quelque chose comme ceci:
Sera sérialisé pour:
Depuis
Jackson 2.7
leLowerCaseWithUnderscoresStrategy
déconseillé en faveur deSnakeCaseStrategy
, vous devez donc utiliser:la source
Les réponses ci-dessus concernant
@JsonProperty
etCAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
sont précises à 100%, bien que certaines personnes (comme moi) puissent essayer de le faire dans une application Spring MVC avec une configuration basée sur le code. Voici un exemple de code (que j'ai à l'intérieurBeans.java
) pour obtenir l'effet souhaité:la source
application.properties
addspring.jackson.property-naming-strategy=CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
. Pour Spring Boot 1.4, utilisez à laspring.jackson.property-naming-strategy=SNAKE_CASE
place.final ObjectMapper objectMapper = new ObjectMapper().setPropertyNamingStrategy( PropertyNamingStrategy.SNAKE_CASE);
La meilleure pratique actuelle consiste à configurer Jackson dans le fichier
application.yml
(ouproperties
).Exemple:
Si vous avez des exigences de configuration plus complexes, vous pouvez également configurer Jackson par programme.
la source
Il y a quelques réponses ici indiquant les deux stratégies pour 2 versions différentes de la bibliothèque Jackson ci-dessous:
Pour Jackson 2.6. *
Pour Jackson 2.7. *
la source