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)
以上关于@JsonProperty
和CAMEL_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); } }