복붙노트

[SPRING] 스프링 저지 잭슨

SPRING

스프링 저지 잭슨

스프링 부트 프로젝트에서 Jackson 구성과 관련된 질문이 있습니다.

스프링 부트 블로그에 설명 된대로

내 개체 직렬화를 사용자 지정하려고합니다.

내 config에 새 config bean을 추가 한 후

@Bean
public Jackson2ObjectMapperBuilder jacksonBuilder() {
    Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();

    builder.propertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
    return builder;
}

내 클래스 사용자의 인스턴스를 출력하려고하면 json 결과가 CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES에 없습니다.

Class User {
    private String firstName = "Joe Blow";

    public String getFirstName() {
        return firstName;
    }
}

json 출력은 다음과 같습니다.

{
  "firstName": "Joe Blow"
}

하지

{
  "first_name": "Joe Blow"
}

어쩌면 내 커스텀 objectMapper 구성을 활성화하기 위해 저지 설정에 무언가를 등록해야 할 것입니다.

@Configuration
public class JerseyConfig extends ResourceConfig {
    public JerseyConfig() {
        packages("my.package);
    }
}

감사

해결법

  1. ==============================

    1.JAX-RS / Jersey 애플리케이션 용 ObjectMapper를 구성하는 일반적인 방법은 ContextResolver를 사용하는 것입니다. 예를 들어

    JAX-RS / Jersey 애플리케이션 용 ObjectMapper를 구성하는 일반적인 방법은 ContextResolver를 사용하는 것입니다. 예를 들어

    @Provider
    public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {
    
        private final ObjectMapper mapper;
    
        public ObjectMapperContextResolver() {
            mapper = new ObjectMapper();
            mapper.setPropertyNamingStrategy(
                PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
            );
        }
    
        @Override
        public ObjectMapper getContext(Class<?> type) {
            return mapper;
        }
    }
    

    패키지 스캔으로 선택해야합니다. 패키지 범위 내에 있지 않으면 명시 적으로 등록 할 수 있습니다.

    public JerseyConfig() {
        register(new ObjectMapperContextResolver());
        // Or if there's is an injection required
        // register it as a .class instead of instance
    }
    

    ContextResolver는, 정렬 화 및 비 정렬 화중에 불려갑니다. 직렬화 또는 직렬화 복원 될 클래스 / 유형은 getContext 메소드에 전달됩니다. 따라서 서로 다른 유형 또는 더 많은 사용 사례에 대해 둘 이상의 매퍼를 사용할 수도 있습니다.

    Spring Boot 1.4부터는 ObjectMapper Spring bean을 만들면 Spring Boot가 ContextResolver를 만들고 ObjectMapper를 사용한다.

    // in your `@Configuration` file.
    @Bean
    public ObjectMapper mapper() {}
    
  2. from https://stackoverflow.com/questions/31685653/spring-boot-jersey-jackson by cc-by-sa and MIT license