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 User
clase con firstName
campo en camello, al mismo tiempo necesito decirle a Jackson que asigne la first_name
clave de JSON al firstName
campo de clase. ¿Es posible?
class User{
protected String firstName;
protected String getFirstName(){return firstName;}
}
Puedes configurar el
ObjectMapper
para 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 lascamelCase
propiedades normales de Java)PropertyNamingStrategy.SNAKE_CASE
hizo 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_CASE
no funciona, estoy usando Spring Boot 2.0ObjectMapper
no 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.7
elLowerCaseWithUnderscoresStrategy
en desuso en favor deSnakeCaseStrategy
, por lo que debe utilizar:fuente
Las respuestas anteriores sobre
@JsonProperty
yCAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
son 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.properties
complementospring.jackson.property-naming-strategy=CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
. Para Spring Boot 1.4 usespring.jackson.property-naming-strategy=SNAKE_CASE
en 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