728x90
반응형
@ControllerAdvice를 선언하면 웹어플리케이션의 특정 익셉션들을 공통적으로 핸들링 할 수 있다.
하지만, 서블릿의 404 에러처럼 DispatcherServlet에서 바로 처리해버리는 익셉션들의 경우는 @ControllerAdvice 까지 전달되지 않고 그 전에 DispatcherServlet에 의해 처리된다.
그래서 보통은 404 에러 페이지가 뜨게 된다.
만약 Rest API를 만들때 @RequestMapping이 되지 않은 URI를 공통적으로 처리하여 JSON 객체로 response code 404와 에러 원인을 리턴해주려고 한다면 어떻게 해야할까?
마찬가지로 @ControllerAdvice에서 익셉션 처리를 하고 404 에러가 이 클래스까지 전달되도록 DispatcherServlet 설정을 바꿔야 한다.
스프링의 경우 web.xml에서 DispatcherServlet 설정을 하게 되는데, 기본적으로 이러한 설정이 되어있지 않다.
추가적으로 파라미터를 넘겨줘야 한다.
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:servlet-context.xml</param-value>
</init-param>
<!-- 404에러 페이지로 넘기지 않고, 익셉션을 발생 시키는 설정 -->
<init-param>
<param-name>throwExceptionIfNoHandlerFound</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
이렇게 설정을 추가해주면 이제 @ControllerAdvice에서 에러 핸들링을 해줄수 있다.
728x90
반응형
'SPRINGBOOT > 소스코드' 카테고리의 다른 글
Spring Boot, REST API 예외 응답 로직 작성하기 (0) | 2017.12.06 |
---|---|
Spring Boot, ExceptionHandler, 전역 예외 처리 로직 작성하기 (0) | 2017.12.06 |
[spring] 서블릿 에러 핸들링 - 3 (@ControllerAdvice를 사용한 전역 익셉션 처리) (0) | 2017.12.06 |
[spring] 서블릿 에러 핸들링 - 2 (CustomException과 @ResponseStatus) (0) | 2017.12.06 |
[spring] 서블릿 에러 핸들링 - 1 (@ExceptionHandler, @ResponseStatus) (0) | 2017.12.06 |
Spring Boot, Jackson, @JsonView로 멀티 뷰 구성하기 (0) | 2017.10.26 |
Spring Boot, REST API 예외 응답 로직 작성하기 (0) | 2017.10.26 |
Spring Boot, ExceptionHandler, 전역 예외 처리 로직 작성하기 (0) | 2017.10.26 |