본문 바로가기

프로그래밍/Spring

Spring Framework의 메시지 컨버터를 이용한 FileDownload 구현(3)

이제 마지막으로 File을 처리하는 메시지 컨버터를 Spring 환경설정에 추가해주는 일이 남았다. 예전글에서 얘기했듯이 <mvc:annotation-driven /> 태그를 추가하면 사용자가 만든 메시지 컨버터를 추가할 수 없다. 그래서 <mvc:annotation-driven /> 태그를 빼고 수동으로 일일이 설정해줘야 하는데 무엇을 설정해야 하는지는 여기를 클릭해서 참조하길 바란다.
수동으로 설정하는 부분에 보면  org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter 클래스를 bean으로 설정하는 부분이있다. 여기에 보면 messageConverters 프로퍼티를 설정하는 부분이 있는데 여기에 사용자가 만든 메시지 컨버터를 추가해주면 된다
  

<beans:bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
	<beans:property name="webBindingInitializer" ref="webBindingInitializer" />
	<beans:property name="messageConverters">
		<beans:list>
			<beans:bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
			<beans:bean class="org.springframework.http.converter.StringHttpMessageConverter" />
			<beans:bean class="org.springframework.http.converter.ResourceHttpMessageConverter" />
			<beans:bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" />
			<beans:bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter" />
			<beans:bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" />
			<beans:bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
			<beans:bean class="com.terry.springweb.http.converter.FileHttpMessageConverter" />
		</beans:list>
	</beans:property>
</beans:bean>


messageConverters 프로퍼티를 설정하는 부분을 보면 여러개의 bean들이 list 형태로 등록되어 있는데 그 중 com.terry.springweb.http.converter.FileHttpMessageConverter가 사용자가 만든 메시지 컨버터가 되겠다. 이렇게 해주면 컨트롤러에서 File을 리턴할 경우 파일 다운로드를 처리해주게 된다.

이제 최종적으로 정리를 하자면..

1. HttpMessageConverter<T> 인터페이스를 구현한 T 클래스를 처리해주는 사용자 정의 메시지 컨버터를 제작한다.
2. 컨트롤러에 @RequestBody T 클래스 객체를 파라미터로 하는 함수나 또는 @ResponseBody T 클래스 객체를 리턴하는 함수를  만든다.
3. Spring 환경 설정 파일에서 <mvc:annotation-driven />을 뺀뒤 수동으로 Spring MVC 관련 Bean들을 설정한 후  AnnotationMethodHandlerAdapter 클래스의 messageConverters 프로퍼티에 1번에서 만든 사용자 정의 메시지 컨버터를 추가한다.

이런 작업을 거치면 사용자 정의 메시지 컨버터를 사용할 수 있게 된다.