기본적으로 스프링 부프 프로젝트를 시작해 보면 한글이 제대로 입/출력 되지 않는 문제에 봉착하게 됩니다. 단순하게 RestController만 사용하거나 HTML의 컨텐츠 헤더를 잘 조합하여 사용하면 한글을 문제 없이 사용할 수 있게 되지만 다음의 방법을 사용하여 프로젝트가 전체적으로 한글이 정상적으로 동작하도록 할 수 있습니다.
기존의 프로젝트에 responseBodyConverter와 characterEncodingFilter를 Bean으로 등록해 주시면 작업은 끝납니다.
package utf8; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.web.filter.CharacterEncodingFilter; import javax.servlet.Filter; import java.nio.charset.Charset; @Configuration @EnableAutoConfiguration @ComponentScan public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean public HttpMessageConverter<String> responseBodyConverter() { return new StringHttpMessageConverter(Charset.forName("UTF-8")); } @Bean public Filter characterEncodingFilter() { CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter(); characterEncodingFilter.setEncoding("UTF-8"); characterEncodingFilter.setForceEncoding(true); return characterEncodingFilter; } }
responseBodyConverter는 결과를 출력시에 강제로 UTF-8로 설정하는 역할을 하며 characterEncodingFilter는 POST 요청시에 한글이 깨지는 문제를 보완해줍니다.
참고 :
- http://stackoverflow.com/questions/20935969/make-responsebody-annotated-spring-boot-mvc-controller-methods-return-utf-8
- http://stackoverflow.com/questions/20926329/non-ascii-symbols-in-path-variable-of-spring-mvc-application-on-embedded-tomcat
- https://github.com/spring-projects/spring-boot/issues/540
- http://novafactory.net/archives/3126