Tag Archives: Boot

Spring Boot에서 UTF-8기반 한글 설정하기

spring_logo

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

참고 :

Spring Boot 페이지 오류 발생시키기

spring_logo

Spring Boot에서 오류를 임의로 발생시키기 위해서는 어떻게 할 수 있을까요. 단지 미리 정의해둔 예외를 발생시키기만 하면 됩니다. 말로 설명하는것보다는 코드를 보시는편이 나을것 같습니다.

@Controller
public class MyController {

   @ResponseStatus(value=HttpStatus.NOT_FOUND, reason="잘못된 접근입니다.")
    public class UrlNotFoundException extends RuntimeException { }

    @RequestMapping("/admin")
    public String index(Model model) {
    	...
    	throw new UrlNotFoundException();

    	return "index";
    }
}

위의 예제를 보시면 아시겠지만 미리 정의해둔 Exception이 존재하고 거기에 @ResponseStatus 어노테이션을 지정해 두었습니다. 원하는 응답 HttpStatus 코드를 정의할 수 있습니다. 저의 경우에는 404 Not Found를 지정해 보았습니다. reason설정을 통해 오류 발생시에 유저에게 같이 보여줄 메시지 또한 정의할 수 있습니다.

잘못된 유저의 접근등에서 404 Not Found오류를 띄워 페이지가 존재하지 않는것 처럼 보여줄 수 있습니다. 물론 Spring Security를 사용하면 이런 문제는 더욱 쉽게 해결할 수 있겠지만요. Spring Boot에 Spring Security를 적용하는 방법역시 매우 간단합니다. 다음에는 관련된 글을 정리해 보겠습니다.