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

2. http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/filter/CharacterEncodingFilter.html

3. http://dev.firnow.com/course/3_program/java/javajs/20100719/455191.html

 

글쓴이 : 지돌스타(http://blog.jidolstar.com/700)  

+ Recent posts