Jackson supera los subrayados a favor del caso camello

Resuelto user1384991 asked hace 12 años • 11 respuestas

Recupero una cadena JSON de Internet; Como la mayoría de JSON que he visto, incluye claves largas separadas por guiones bajos. Esencialmente, mi objetivo es deserializar JSON en objetos java, pero no uso guiones bajos en el código java.

Por ejemplo, podría tener una Userclase con firstNamecampo en camel-case, simultáneamente necesito decirle de alguna manera a Jackson que asigne first_namela clave de JSON al firstNamecampo de clase. ¿Es posible?

class User{
    protected String firstName;
    protected String getFirstName(){return firstName;}
}
user1384991 avatar May 09 '12 22:05 user1384991
Aceptado

En Jackson 2.12+, puede configurar ObjectMapperpara convertir mayúsculas y minúsculas en nombres con un guión bajo:

objectMapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);

O anotar una clase de modelo específica con esta anotación:

@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class;)

Antes de Jackson 2.7, la constante se llamaba:

PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
thehpi avatar Jul 24 '2012 13:07 thehpi

Si es una aplicación de arranque de primavera, en el archivo application.properties, simplemente use

spring.jackson.property-naming-strategy=SNAKE_CASE

O anotar la clase de modelo con esta anotación.

@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.clase)

adam.smithsonian01 avatar Nov 21 '2016 22:11 adam.smithsonian01

Debe utilizar @JsonPropertyen el campo en el que desea cambiar la asignación de nombre predeterminada.

class User{
    @JsonProperty("first_name")
    protected String firstName;
    protected String getFirstName(){return firstName;}
}

Para más información: la API

Alex avatar May 09 '2012 15:05 Alex