Java Spring Framework를 활용하는데 발생한 문제이다.
@Controller 어노테이션을 가지고 한글과 영어가 섞인 문자열을 반환하기 위해 @ResponseBody 어노테이션을 이용해 다음과 같이 코딩했다.
@Controller @RequestMapping("/foo") public class Foo { @RequestMapping(value="/foobar", method=RequestMethod.GET) @ResponseBody public string getFoobar() { // Do something that returns some UTF-8 stuff (probably some XML). } }
그리고 문자 인코딩 필터 설정을 아래와 같이 했다.
<filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
하지만 위 설정은 Request에 대해서만 CharacterEncodingFilter가 먹힌다고 한다. 그래서 Response에 대해서도 UTF-8이 될 수 있도록 설정할 필요가 있다.
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" > <property name="messageConverters"> <list> <bean class = "org.springframework.http.converter.StringHttpMessageConverter"> <property name = "supportedMediaTypes"> <list> <value>text/plain;charset=UTF-8</value> </list> </property> </bean> </list> </property> </bean>
위 설정은 @Controller에서 @ResponseBody로 지정시 반환값에 한글이 있으면 깨지는 현상을 방지하기 위해 사용한다.
명확히 이해하고 사용하는 건지 모르겠지만 분명 저렇게 하면 한글이 안깨지고 잘 반환한다.
참고글
1. https://issues.springsource.org/browse/SPR-6443
3. http://dev.firnow.com/course/3_program/java/javajs/20100719/455191.html
글쓴이 : 지돌스타(http://blog.jidolstar.com/700)
'소프트웨어 개발 > Java' 카테고리의 다른 글
자바 개발자를 위한 ‘共感(공감)’을 찾아서 세번째 (0) | 2010.09.08 |
---|---|
Eclipse에서 JPetStore 테스트 환경 구축 - Spring Framework 2.5, iBatis (3) | 2010.05.18 |
AOP - Aspect Oriented Programming, 관점 지향 프로그래밍 (2) | 2010.05.13 |