Java 구성에서 사용할 HttpMessageConverter
인스턴스를 설정하고, configureMessageConverters()
를 재정의하여 기본적으로 사용되는 인스턴스를 대체할 수 있습니다. 또한 extendMessageConverters()
를 재정의하여 마지막에 구성된 메시지 변환기 목록을 사용자 정의할 수도 있습니다.
[Tip]
Spring Boot 애플리케이션에서WebMvcAutoConfiguration
은 기본 변환기 외에 감지한 모든HttpMessageConverter
Bean을 추가합니다. 따라서 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"/>