Development/Java

SpringBoot Jackson(ObjectMapper) Config

반응형

Springboot의 기본 MessageConverter(JSON <-> POJO) 는 FasterXMl의 Jackson이다


이 Converter의 옵션을 변경해야할 때도 있는데, 설정하는 방법에 대해 기술하려고 한다.


일단 Springboot의 @Configuration이 붙은 클래스에 config를 기술하게 되는데




@Configuration
public class WebConfig extends WebMvcConfigurationSupport {

    @Override
    public void configureMessageConverters(List> converters) {

        final Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
        final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        final ObjectMapper objectMapper = new ObjectMapper();

        // ObjectMapper Settings(JODA)
        objectMapper.registerModule(new JodaModule());
        objectMapper.configure(com.fasterxml.jackson.databind.SerializationFeature.
                WRITE_DATES_AS_TIMESTAMPS, false);
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
        converter.setObjectMapper(objectMapper);

        builder.serializationInclusion(JsonInclude.Include.NON_NULL);
        builder.serializationInclusion(JsonInclude.Include.NON_EMPTY);

        // Add settings to converter, builder
        converters.add(converter);
        converters.add(new MappingJackson2HttpMessageConverter(builder.build()));
        converters.add(new MappingJackson2XmlHttpMessageConverter(builder.createXmlMapper(true).build()));
    }

}


webMvcConfigurationSupport를 상속받아서 메세지 컨버터를 override를 하게 되면


스프링에서 사용하는 메세지 컨버팅을 직접 지정할 수 있다.


사실 여기에 Jackson만 사용하는 것은 아니고, 뭐.. XstreamMarshaller 라던지 POJO <-> JSON,XML로 매핑을 해주는 그러한 


일련의 직/역직렬화 라이브러리를 기술하게 된다면 기본으로 사용하는 마셜러를 바꿀 수 있다


다만, FasterXML(Jackson)이 워낙 준수한 성능을 보여주고 있기 때문에


굳이 바꾼다고 해서 득을 볼 건 없으리라고 생각이 된다.


(그나저나,  직/역직렬화 라이브러리 중에 가장 빠르게 동작하는건 Kryo 라는 라이브러리인데.. 이놈을 바꿔서 테스트해보진 않았다.

스프링에서 Jackson을 사용할때랑 Kryo를 사용했을 때의 비교가 따로 없어서 비교는 안되지만, 그래도 유의미한 성능차이가 있지 않을까 생각됨)

-> 성능 차이를 보아하니 별 차이가 없을 것 같다; (예전에 성능 비교를 봤을때 매우 차이가 났던거같았는데, 차이가 거의 없을 것 같다)


위와같이 기술하게 되면 MessageConverter의 옵션을 바꿔서 생성시킬 수 있다.


JSON 관련 옵션이나, XML 설정, JodaModule 등 적용해야 할 필요가 있을 때 사용하면 된다.


본인은 Timestamp 및 datetime 설정 관련을 override해서 바꿔야하는 이유때문에 이렇게 사용했다.

반응형