Recupero una cadena JSON de internet; Como la mayoría de JSON que he visto, incluye teclas largas que están separadas por guiones bajos. Esencialmente, mi objetivo es deserializar JSON en objetos java, pero no uso guiones bajos en código java.
Por ejemplo, podría tener una Userclase con firstNamecampo en camello, al mismo tiempo necesito decirle a Jackson que asigne la first_nameclave de JSON al firstNamecampo de clase. ¿Es posible?
class User{
protected String firstName;
protected String getFirstName(){return firstName;}
}

Puedes configurar el
ObjectMapperpara convertir el caso de camello a nombres con un guión bajo:O anote una clase de modelo específica con esta anotación:
Antes de Jackson 2.7, la constante se llamaba:
fuente
@JsonProperty(nombre inferido de lascamelCasepropiedades normales de Java)PropertyNamingStrategy.SNAKE_CASEhizo que la deserialización dejara de funcionar con camelCase JSON (como había estado usando) y requiera snake_case.Si es una aplicación de arranque de primavera, en el archivo application.properties, simplemente use
O anote la clase de modelo con esta anotación.
fuente
spring.jackson.property-naming-strategy=SNAKE_CASEno funciona, estoy usando Spring Boot 2.0ObjectMapperno es creado por Spring? Cree una clase @Configuration con un método @Bean que devuelva un ObjectMapper. No estoy seguro si esto es necesario.Si desea esto para una clase única, puede usar PropertyNamingStrategy con @JsonNaming , algo así:
Se serializará a:
Desde
Jackson 2.7elLowerCaseWithUnderscoresStrategyen desuso en favor deSnakeCaseStrategy, por lo que debe utilizar:fuente
Las respuestas anteriores sobre
@JsonPropertyyCAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORESson 100% precisas, aunque algunas personas (como yo) podrían estar tratando de hacer esto dentro de una aplicación Spring MVC con configuración basada en código. Aquí hay un código de muestra (que tengo dentroBeans.java) para lograr el efecto deseado:fuente
application.propertiescomplementospring.jackson.property-naming-strategy=CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES. Para Spring Boot 1.4 usespring.jackson.property-naming-strategy=SNAKE_CASEen su lugar.final ObjectMapper objectMapper = new ObjectMapper().setPropertyNamingStrategy( PropertyNamingStrategy.SNAKE_CASE);La mejor práctica actual es configurar Jackson dentro de
application.yml(oproperties) archivo.Ejemplo:
Si tiene requisitos de configuración más complejos, también puede configurar Jackson mediante programación.
fuente
Aquí hay pocas respuestas que indican ambas estrategias para 2 versiones diferentes de la biblioteca Jackson a continuación:
Para Jackson 2.6. *
Para Jackson 2.7. *
fuente