인터넷에서 JSON 문자열을 검색합니다. 내가 본 대부분의 JSON과 마찬가지로 밑줄로 구분 된 긴 키가 포함되어 있습니다. 본질적으로 내 목표는 JSON을 java 객체로 deserialize하는 것이지만 Java 코드에는 밑줄을 사용하지 않습니다.
예를 들어 낙타의 경우 필드 가있는 User
클래스가 있을 수 있으며 firstName
동시에 잭슨에게 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
답변
ObjectMapper
낙타 문자를 밑줄을 사용하여 이름으로 변환 하도록 구성 할 수 있습니다 .
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
또는 다음 주석으로 특정 모델 클래스에 주석을 답니다.
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
Jackson 2.7 이전에는 상수 이름이 다음과 같이 지정되었습니다.
PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
답변
스프링 부트 응용 프로그램 인 경우 application.properties 파일에서
spring.jackson.property-naming-strategy = SNAKE_CASE
또는이 주석으로 모델 클래스에 주석을 답니다.
@JsonNaming (PropertyNamingStrategy.SnakeCaseStrategy.class)
답변
단일 클래스에 대해 이것을 원한다면 다음 과 같이 @JsonNaming 과 함께 PropertyNamingStrategy 를 사용할 수 있습니다 .
@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
(나 같은) 어떤 사람들은 코드 기반의 구성으로 스프링 MVC 응용 프로그램 내에서이 작업을 수행하려고 할 수도 있지만, 100 % 정확합니다. Beans.java
원하는 효과를 얻는 샘플 코드 (내가 가지고있는 ) 는 다음과 같습니다 .
@Bean
public ObjectMapper jacksonObjectMapper() {
return new ObjectMapper().setPropertyNamingStrategy(
PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
}
답변
현재 모범 사례는 application.yml
(또는properties
) 파일 입니다.
예:
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);
Jackson 2.7의 경우 *
ObjectMapper objMapper = new ObjectMapper(new JsonFactory()); // or YAMLFactory()
objMapper.setNamingStrategy(
PropertyNamingStrategy.SNAKE_CASE);