jackson克服强调骆驼案件的强调

我从互联网上检索一个JSONstring; 像大多数JSON我已经看到它包括由下划线分隔的长键。 从本质上讲,我的目标是将JSON反序列化为java对象,但是我不在java代码中使用下划线。

例如,我可能有骆驼案件的firstName字段的User类,同时我需要以某种方式告诉jackson将first_name键从JSON映射到firstName类字段。 可能吗?

 class User{ protected String firstName; protected String getFirstName(){return firstName;} } 

您应该在要更改默认名称映射的字段上使用@JsonProperty

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

有关更多信息: API

您可以configurationObjectMapper将驼峰大小写转换为带有下划线的名称

 this.objectMapper.setPropertyNamingStrategy( PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES); 

如果它是一个spring引导应用程序,在application.properties文件中,只需使用

spring.jackson.property命名策略= SNAKE_CASE

或者用这个注解来注释模型类。

@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)

以上关于@JsonPropertyCAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES回答是100%准确的,尽pipe一些人(像我)可能正在尝试在基于代码的configuration的Spring MVC应用程序中这样做。 下面是示例代码(我在Beans.java里面)来实现所需的效果:

 @Bean public ObjectMapper jacksonObjectMapper() { return new ObjectMapper().setPropertyNamingStrategy( PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES); } 

如果你想要一个单一的类,你可以使用@JsonNaming的PropertyNamingStrategy ,就像这样:

 @JsonNaming(PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy.class) public static class Request { String businessName; String businessLegalName; } 

将序列化为:

 { "business_name" : "", "business_legal_name" : "" } 

对于较新版本的Spring,把这个configuration文件放到你的项目中(或者只是拿豆子)。 我发现这适用于响应映射,以及请求身体映射。

 import com.fasterxml.jackson.databind.PropertyNamingStrategy; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; @Configuration public class JacksonConfiguration { @Bean public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() { return new Jackson2ObjectMapperBuilder() .propertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE); } }