我检索一个JSON字符串从互联网;像大多数JSON一样,我看到它包含用下划线分隔的长键。从本质上讲,我的目标是将JSON反序列化为java对象,但我没有在java代码中使用下划线。
例如,我可能有一个用户类的firstName字段在驼峰情况下,同时我需要以某种方式告诉杰克逊映射first_name键从JSON到firstName类字段。这可能吗?
class User{
protected String firstName;
protected String getFirstName(){return firstName;}
}
当前的最佳实践是在应用程序中配置Jackson。Yml(或属性)文件。
例子:
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
}
}
如果你想要一个类,你可以使用PropertyNamingStrategies和@JsonNaming,注释,像这样:
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public static class Request {
String businessName;
String businessLegalName;
}
将序列化到:
{
"business_name" : "",
"business_legal_name" : ""
}
Jackson 2.7之前,使用PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy.class:
@JsonNaming(PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy.class)
public static class Request {
String businessName;
String businessLegalName;
}
从Jackson 2.7到Jackson 2.12, LowerCaseWithUnderscoresStrategy被弃用,取而代之的是SnakeCaseStrategy,所以你应该使用:
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public static class Request {
String businessName;
String businessLegalName;
}
自Jackson 2.12以来,PropertyNamingStrategy。SnakeCaseStrategy已弃用,取而代之的是PropertyNamingStrategies。你应该使用SnakeCaseStrategy:
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public static class Request {
String businessName;
String businessLegalName;
}