Message Converters

Dev.Hammy·2024년 4월 8일
0

반응형 스택에서 이에 상응하는 내용 보기

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는 들여쓰기가 활성화된 MappingJackson2HttpMessageConverterMappingJackson2XmlHttpMessageConverter, 사용자 정의 날짜 형식 및 jackson-module-parameter-names 등록을 위한 공통 구성을 생성하는 데 사용됩니다. (자바 8에 추가된 특성).

이 빌더는 다음과 같이 Jackson의 기본 속성을 사용자 정의합니다.

  • DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES가 비활성화되었습니다.

  • MapperFeature.DEFAULT_VIEW_INCLUSION이 비활성화되었습니다.

또한 클래스 경로에서 감지되면 다음과 같은 잘 알려진 모듈을 자동으로 등록합니다.

[Note]
Jackson XML 지원으로 들여쓰기를 활성화하려면 jackson-dataformat-xml 종속성 외에 woodstox-core-asl 종속성이 필요합니다.
다른 흥미로운 Jackson 모듈도 사용할 수 있습니다:

다음 예에서는 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"/>

0개의 댓글