我从互联网上检索一个JSON字符串; 像大多数JSON我看到它包括由下划线分隔的长键.本质上,我的目标是将JSON反序列化为java对象,但我不在java代码中使用下划线.
例如,我可能在camel-case中有一个User带firstName字段的类,同时我需要以某种方式告诉Jackson将first_name密钥从JSON 映射到firstName类字段.可能吗?
class User{
protected String firstName;
protected String getFirstName(){return firstName;}
}
Run Code Online (Sandbox Code Playgroud)
the*_*hpi 306
您可以配置ObjectMapper以将驼峰大小写转换为带有下划线的名称
this.objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
Run Code Online (Sandbox Code Playgroud)
小智 112
如果是一个spring boot应用程序,请在application.properties文件中使用
spring.jackson.property命名策略= SNAKE_CASE
或者使用此批注对模型类进行批注.
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
Ale*_*lex 92
您应该使用@JsonProperty要更改默认名称映射的字段.
class User{
@JsonProperty("first_name")
protected String firstName;
protected String getFirstName(){return firstName;}
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息:API
Art*_*lpe 41
如果你想要单个类,你可以使用PropertyJamingStrategy和@JsonNaming,如下所示:
@JsonNaming(PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy.class)
public static class Request {
String businessName;
String businessLegalName;
}
Run Code Online (Sandbox Code Playgroud)
将序列化为:
{
"business_name" : "",
"business_legal_name" : ""
}
Run Code Online (Sandbox Code Playgroud)
由于Jackson 2.7在LowerCaseWithUnderscoresStrategy中弃用,取而代之的SnakeCaseStrategy,所以你应该使用:
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public static class Request {
String businessName;
String businessLegalName;
}
Run Code Online (Sandbox Code Playgroud)
Duf*_*ffJ 27
以上答案关于@JsonProperty并且CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES100%准确,尽管有些人(像我一样)可能试图在具有基于代码的配置的Spring MVC应用程序中执行此操作.这里是示例代码(我在里面Beans.java)以实现所需的效果:
@Bean
public ObjectMapper jacksonObjectMapper() {
return new ObjectMapper().setPropertyNamingStrategy(
PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
}
Run Code Online (Sandbox Code Playgroud)
小智 13
为了注释模型类,请使用:
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
Run Code Online (Sandbox Code Playgroud)
代替:
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
Run Code Online (Sandbox Code Playgroud)
自 2.12 起已弃用。
Ken*_*son 12
目前的最佳做法是在application.yml(或properties)文件中配置Jackson .
例:
spring:
jackson:
property-naming-strategy: SNAKE_CASE
Run Code Online (Sandbox Code Playgroud)
如果您有更复杂的配置要求,还可以通过编程方式配置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
}
}
Run Code Online (Sandbox Code Playgroud)
这里几乎没有答案表明以下两种不同版本的Jackson库的策略:
对于杰克逊2.6.*
ObjectMapper objMapper = new ObjectMapper(new JsonFactory()); // or YAMLFactory()
objMapper.setNamingStrategy(
PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
Run Code Online (Sandbox Code Playgroud)
杰克逊2.7.*
ObjectMapper objMapper = new ObjectMapper(new JsonFactory()); // or YAMLFactory()
objMapper.setNamingStrategy(
PropertyNamingStrategy.SNAKE_CASE);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
90810 次 |
| 最近记录: |