이제 마지막으로 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번에서 만든 사용자 정의 메시지 컨버터를 추가한다.
이런 작업을 거치면 사용자 정의 메시지 컨버터를 사용할 수 있게 된다.
'프로그래밍 > Spring' 카테고리의 다른 글
Spring Framework의 ContentNegotiatingViewResolver에 대하여... (2) (0) | 2015.03.23 |
---|---|
Spring Framework의 ContentNegotiatingViewResolver에 대하여... (1) (1) | 2015.03.23 |
Spring Framework의 메시지 컨버터를 이용한 FileDownload 구현(2) (0) | 2015.03.23 |
Spring Framework의 메시지 컨버터를 이용한 FileDownload 구현(1) (0) | 2015.03.23 |
<mvc:annotation-driven />이 설정해주는 Spring 설정 Tag (3) | 2015.03.23 |