복붙노트

[SPRING] 봄 부팅 1.4 잭슨을 사용자 지정하는 방법

SPRING

봄 부팅 1.4 잭슨을 사용자 지정하는 방법

나는 잭슨의 기능을 사용자 정의 봄 부팅 1.4 Jackson2ObjectMapperBuilderCustomizer.java을 사용하는 방법의 예를 찾을 수있었습니다.

부팅 1.4 잭슨을 사용자 정의에 대한 DOCO - http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-customize-the-jackson-

내가 확실하지 오전하지만이 Jackson2ObjectMapperBuilderCustomizer.java를 사용하여 객체 매퍼를 사용자 정의 할 수있는 올바른 방법 인 경우 내 구성, 작동

@Configuration
public class JacksonAutoConfiguration {

    @Autowired
    private Environment env;

    @Bean
    public Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder(
        List<Jackson2ObjectMapperBuilderCustomizer> customizers) {
        Jackson2ObjectMapperBuilder builder = configureObjectMapper();
        customize(builder, customizers);
        return builder;
    }

    private void customize(Jackson2ObjectMapperBuilder builder,
                           List<Jackson2ObjectMapperBuilderCustomizer> customizers) {
        for (Jackson2ObjectMapperBuilderCustomizer customizer : customizers) {
            customizer.customize(builder);
        }
    }

    private Jackson2ObjectMapperBuilder configureObjectMapper() {
        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
        List<String> activeProfiles = asList(env.getActiveProfiles());
        if (activeProfiles.contains(SPRING_PROFILE_DEVELOPMENT)) {
            builder.featuresToEnable(SerializationFeature.INDENT_OUTPUT);
        }
        return builder;
    }
}

일부 내용을 제공하기 위해,이 클래스는 자동 ControllerAdvice 및 위 같은 몇 가지 사소한 기능처럼 여러 가지를 구성 REST 서비스에 대한 내 자신의 봄 스타터 프로젝트에 앉아있다.

그래서 내 목표는 잭슨의 구성을 확장하기보다는 부팅 또는 다른 패키지가 제공하는 구성을 무시하는 것입니다.

해결법

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

    1.이미 봄 부팅에 의해 사전 구성 년대 잭슨 ObjectMapper을 사용자 정의하려면, 내가이 일을 할 수 있었다 (여기 예제는 사용자 정의 디시리얼라이저를 추가하는 것입니다).

    이미 봄 부팅에 의해 사전 구성 년대 잭슨 ObjectMapper을 사용자 정의하려면, 내가이 일을 할 수 있었다 (여기 예제는 사용자 정의 디시리얼라이저를 추가하는 것입니다).

    구성 클래스 :

    @SpringBootConfiguration
    public class Application {
    
        @Autowired
        private BigDecimalDeserializer bigDecimalDeserializer;
    
        ...
    
        @Bean
        public Jackson2ObjectMapperBuilderCustomizer addCustomBigDecimalDeserialization() {
            return new Jackson2ObjectMapperBuilderCustomizer() {
    
                @Override
                public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
                    jacksonObjectMapperBuilder.deserializerByType(BigDecimal.class, bigDecimalDeserializer);
                }
    
            };
        }
    
        ...
    
    }
    

    그리고 내 사용자 지정 디시리얼라이저는이 봄에 의해 포착 어떻게 보여 :

    @Component
    public class BigDecimalDeserializer extends StdDeserializer<BigDecimal> {
    
        public BigDecimalDeserializer() {
            super(BigDecimal.class);
        }
    
        @Override
        public BigDecimal deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
            ...
        }
    
        ...
    
    }
    
  2. ==============================

    2.그것은 당신이 뭘 하려는지에 따라 달라집니다.

    그것은 당신이 뭘 하려는지에 따라 달라집니다.

    당신이 기본적으로 수행 된 것 외에 몇 가지 사용자 정의한 내용을 확인하려면 다음 당신은 당신의 자신의 Jackson2ObjectMapperBuilderCustomizer 구현을 작성하고 콩으로 노출한다. 당신이 현재 가지고하는 것은이의 더 복잡한 버전입니다. 오히려 그들에게 자신을 호출 한 다음 customisers 주입 갖는 것보다, 당신은 당신의 자신의 customiser 빈을 만들고 부팅 당신을 위해 그것을 호출합니다.

    당신이 완전히 제어 및 부팅의 사용자 정의한 모든 전원을 끄려면 다음 Jackson2ObjectMapperBuilder 또는 ObjectMapper 콩을 작성하고 필요에 따라 구성합니다. 이 빌더는 다음 또한 봄 데이터 REST와 같은 다른 구성 요소에 의해 생성 ObjectMappers를 구성하는 데 사용되는 빌더 접근이 바람직하다.

    코드를 보면 다시 단계를 복용, 당신은 단순히 잭슨의 출력의 들여 쓰기를 가능하게하는 프로파일 별 구성 파일 (application-dev.properties 같은)를 사용하여 훨씬 더 많은 일을 구성 할 수 있습니다. 당신은 여기에 대한 자세한 내용을보실 수 있습니다.

  3. ==============================

    3.단지 ObjectMapper 빈을 만듭니다

    단지 ObjectMapper 빈을 만듭니다

    @Bean
    ObjectMapper objectMapper() {
        return Jackson2ObjectMapperBuilder
                .json()
                .featuresToEnable(MapperFeature.DEFAULT_VIEW_INCLUSION)
                .build();
    }
    
  4. from https://stackoverflow.com/questions/39263553/how-to-customise-jackson-in-spring-boot-1-4 by cc-by-sa and MIT license