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해서 바꿔야하는 이유때문에 이렇게 사용했다.
'Development > Java' 카테고리의 다른 글
[Spring Boot] Resource load 관련 (0) | 2018.06.08 |
---|---|
[Spring Boot] Spring Security maximumSessions 관련 (0) | 2018.06.08 |
[Spring] @Valid Collection Validation 관련 (3) | 2017.06.22 |
[Framework] Light4J(light-java) (0) | 2017.05.28 |
[JAVA] Object Pooling (0) | 2017.05.19 |