Eu recupero uma string JSON da internet; como a maioria dos JSON que eu vi, inclui chaves longas separadas por sublinhados. Essencialmente, meu objetivo é desserializar JSON em objetos java, mas não uso sublinhados no código java.
Por exemplo, eu posso ter uma User
classe com firstName
campo em caso de camelo, simultaneamente, preciso de alguma forma dizer a Jackson para mapear a first_name
chave do JSON para o firstName
campo da classe. É possível?
class User{
protected String firstName;
protected String getFirstName(){return firstName;}
}
Você pode configurar o
ObjectMapper
para converter maiúsculas de minúsculas em nomes com um sublinhado:Ou anote uma classe de modelo específica com esta anotação:
Antes de Jackson 2.7, a constante tinha o nome:
fonte
@JsonProperty
(nome inferido dascamelCase
propriedades normais do Java), aPropertyNamingStrategy.SNAKE_CASE
desserialização parou de funcionar com o camelCase JSON (como eu estava usando) e requer o snake_case.Se for um aplicativo de inicialização com mola, no arquivo application.properties, use
Ou Anote a classe do modelo com esta anotação.
fonte
spring.jackson.property-naming-strategy=SNAKE_CASE
não trabalho, eu estou usando Spring inicialização 2.0ObjectMapper
não seja criado pelo Spring? Crie uma classe @Configuration com um método @Bean que retorne um ObjectMapper. Não tenho certeza se isso é necessário.Se você deseja isso para uma classe única, pode usar o PropertyNamingStrategy com o @JsonNaming , algo como isto:
Serializará para:
Como
Jackson 2.7
oLowerCaseWithUnderscoresStrategy
in foi descontinuado em favor deSnakeCaseStrategy
, você deve usar:fonte
As respostas acima são
@JsonProperty
eCAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
são 100% precisas, embora algumas pessoas (como eu) possam estar tentando fazer isso dentro de um aplicativo Spring MVC com configuração baseada em código. Aqui está o código de exemplo (que eu tenho dentroBeans.java
) para alcançar o efeito desejado:fonte
application.properties
adiçãospring.jackson.property-naming-strategy=CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
. Para o Spring Boot 1.4, use emspring.jackson.property-naming-strategy=SNAKE_CASE
vez disso.final ObjectMapper objectMapper = new ObjectMapper().setPropertyNamingStrategy( PropertyNamingStrategy.SNAKE_CASE);
A melhor prática atual é configurar o Jackson no arquivo
application.yml
(ouproperties
).Exemplo:
Se você tiver requisitos de configuração mais complexos, também poderá configurar o Jackson programaticamente.
fonte
Existem poucas respostas aqui indicando as duas estratégias para duas versões diferentes da biblioteca Jackson abaixo:
Para Jackson 2.6. *
Para Jackson 2.7. *
fonte