낙타 사건에 찬성하여 밑줄을 극복하는 잭슨 키가 포함되어 있습니다. 본질적으로

인터넷에서 JSON 문자열을 검색합니다. 내가 본 대부분의 JSON과 마찬가지로 밑줄로 구분 된 긴 키가 포함되어 있습니다. 본질적으로 내 목표는 JSON을 java 객체로 deserialize하는 것이지만 Java 코드에는 밑줄을 사용하지 않습니다.

예를 들어 낙타의 경우 필드 가있는 User클래스가 있을 수 있으며 firstName동시에 잭슨에게 first_nameJSON에서 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.7LowerCaseWithUnderscoresStrategySnakeCaseStrategy

@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);