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
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,