Answers:
您应该@JsonProperty
在要更改默认名称映射的字段上使用。
class User{
@JsonProperty("first_name")
protected String firstName;
protected String getFirstName(){return firstName;}
}
有关更多信息:API
您可以配置ObjectMapper
将驼峰大小写转换为带下划线的名称:
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
或使用此注释来注释特定的模型类:
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
在Jackson 2.7之前,常量被命名为:
PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
@JsonProperty
(从正常camelCase
Java属性推断出的名称),PropertyNamingStrategy.SNAKE_CASE
使得反序列化停止使用camelCase JSON(就像我一直在使用的那样),并且需要snake_case。
如果它是spring boot应用程序,请在application.properties文件中使用
spring.jackson.property-naming-strategy = SNAKE_CASE
或使用此注释对模型类进行注释。
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
spring.jackson.property-naming-strategy=SNAKE_CASE
不起作用,我正在使用Spring Boot 2.0
ObjectMapper
不是由Spring创建的?使用返回一个ObjectMapper的@Bean方法创建一个@Configuration类。不知道这是否必要。
如果您希望将其用于单个类,则可以将PropertyNamingStrategy与@JsonNaming结合使用,如下所示:
@JsonNaming(PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy.class)
public static class Request {
String businessName;
String businessLegalName;
}
将序列化为:
{
"business_name" : "",
"business_legal_name" : ""
}
由于Jackson 2.7
在LowerCaseWithUnderscoresStrategy
中弃用,取而代之的SnakeCaseStrategy
,所以你应该使用:
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public static class Request {
String businessName;
String businessLegalName;
}
上面的答案关于@JsonProperty
和,CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
它们都是100%准确的,尽管有些人(例如我)可能正在尝试使用基于代码的配置在Spring MVC应用程序中执行此操作。这是Beans.java
实现所需效果的示例代码(我在inside ):
@Bean
public ObjectMapper jacksonObjectMapper() {
return new ObjectMapper().setPropertyNamingStrategy(
PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
}
application.properties
add中使用Spring Boot的替代方法spring.jackson.property-naming-strategy=CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
。对于Spring Boot 1.4,请spring.jackson.property-naming-strategy=SNAKE_CASE
改用。
final ObjectMapper objectMapper = new ObjectMapper().setPropertyNamingStrategy( PropertyNamingStrategy.SNAKE_CASE);
当前的最佳实践是在application.yml
(或properties
)文件中配置Jackson 。
例:
spring:
jackson:
property-naming-strategy: SNAKE_CASE
如果您有更复杂的配置要求,则还可以通过编程方式配置Jackson。
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);
// insert other configurations
}
}
此处几乎没有答案指出下面两种不同版本的Jackson库的两种策略:
对于杰克逊2.6。*
ObjectMapper objMapper = new ObjectMapper(new JsonFactory()); // or YAMLFactory()
objMapper.setNamingStrategy(
PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
对于杰克逊2.7。*
ObjectMapper objMapper = new ObjectMapper(new JsonFactory()); // or YAMLFactory()
objMapper.setNamingStrategy(
PropertyNamingStrategy.SNAKE_CASE);