기본적으로 스프링 부프 프로젝트를 시작해 보면 한글이 제대로 입/출력 되지 않는 문제에 봉착하게 됩니다. 단순하게 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
