Java 구성에서 사용할 HttpMessageConverter 인스턴스를 설정하고, configureMessageConverters()를 재정의하여 기본적으로 사용되는 인스턴스를 대체할 수 있습니다. 또한 extendMessageConverters()를 재정의하여 마지막에 구성된 메시지 변환기 목록을 사용자 정의할 수도 있습니다.
[Tip]
Spring Boot 애플리케이션에서WebMvcAutoConfiguration은 기본 변환기 외에 감지한 모든HttpMessageConverterBean을 추가합니다. 따라서 Boot 애플리케이션에서는 HttpMessageConverters 메커니즘을 사용하는 것이 좋습니다. 또는extendMessageConverters를 사용하여 마지막에 메시지 변환기를 수정합니다.
다음 예에서는 기본 ObjectMapper 대신 사용자 정의된 ObjectMapper를 사용하여 XML 및 Jackson JSON 변환기를 추가합니다.
@Configuration
@EnableWebMvc
public class WebConfiguration implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder()
.indentOutput(true)
.dateFormat(new SimpleDateFormat("yyyy-MM-dd"))
.modulesToInstall(new ParameterNamesModule());
converters.add(new MappingJackson2HttpMessageConverter(builder.build()));
converters.add(new MappingJackson2XmlHttpMessageConverter(builder.createXmlMapper(true).build()));
}
}
앞의 예에서 Jackson2ObjectMapperBuilder는 들여쓰기가 활성화된 MappingJackson2HttpMessageConverter 및 MappingJackson2XmlHttpMessageConverter, 사용자 정의 날짜 형식 및 jackson-module-parameter-names 등록을 위한 공통 구성을 생성하는 데 사용됩니다. (자바 8에 추가된 특성).
이 빌더는 다음과 같이 Jackson의 기본 속성을 사용자 정의합니다.
DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES가 비활성화되었습니다.
MapperFeature.DEFAULT_VIEW_INCLUSION이 비활성화되었습니다.
또한 클래스 경로에서 감지되면 다음과 같은 잘 알려진 모듈을 자동으로 등록합니다.
jackson-datatype-joda: Joda-Time 유형을 지원합니다.
jackson-datatype-jsr310: Java 8 날짜 및 시간 API 유형을 지원합니다.
jackson-datatype-jdk8: Optional과 같은 다른 Java 8 유형을 지원합니다.
jackson-module-kotlin: Kotlin 클래스 및 데이터 클래스를 지원합니다.
[Note]
Jackson XML 지원으로 들여쓰기를 활성화하려면jackson-dataformat-xml종속성 외에woodstox-core-asl종속성이 필요합니다.
다른 흥미로운 Jackson 모듈도 사용할 수 있습니다:
jackson-datatype-money: javax.money 유형 지원(비공식 모듈)
jackson-datatype-hibernate: Hibernate 관련 유형 및 속성(지연 로딩 aspect 포함)을 지원합니다.
다음 예에서는 XML에서 동일한 구성을 달성하는 방법을 보여줍니다.
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper" ref="objectMapper"/>
</bean>
<bean class="org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter">
<property name="objectMapper" ref="xmlMapper"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<bean id="objectMapper" class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"
p:indentOutput="true"
p:simpleDateFormat="yyyy-MM-dd"
p:modulesToInstall="com.fasterxml.jackson.module.paramnames.ParameterNamesModule"/>
<bean id="xmlMapper" parent="objectMapper" p:createXmlMapper="true"/>