Spring MVC SimpleMappingExceptionResolver 간단한 에러처리

Spring의 SimpleMappingExceptionResolver를 활용한 Exception 처리방법에 대해 살펴보겠습니다.

DispatcherServlet 설정 XML 파일에서 설정하는 것만으로 Exception 별로 원하는 화면에 연결할 수 있습니다.

 

SimpleMappingExceptionResolver 설정하기

DispatcherServlet 설정 XML 파일에서 아래와 같이 코드를 작성합니다.

<!-- SimpleMappingExceptionResolver -->
<beans:bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <beans:property name="exceptionMappings">
        <beans:props>
            <beans:prop key="java.lang.NullPointerException">error/null_error</beans:prop>
        </beans:props>
    </beans:property>
    <beans:property name="defaultErrorView" value="error/common_error" />
    <!-- exception 정보 담을 객체, default: 'exception' -->
    <!-- <property name="exceptionAttribute" value="exception" /> -->
</beans:bean>

NullPointerException 이 발생했을때는 WEB-INF/views/error/null_error.jsp 뷰로 연결되고

그 외의 Exception이 발생한 경우 WEB-INF/views/error/common_error.jsp 뷰로 연결이 됩니다.

Exception에 대한 정보는 'exception'이라는 이름에 모델에 담겨 전달됩니다.

 

예제코드라 NullPointerException에 대해서만 다른 뷰로 연결했습니다.

원하는 Exception 별로 뷰를 연결하여 사용하시면 됩니다.

 

에러 View페이지 만들기

설정 파일에서 설정한 Exception 연결 뷰페이지를 만들어줍니다.

1. /WEB-INF/views/error/common_error.jsp

<html>
    <body>
        <h1>Hello Common Error!</h1>
        <p>Exception: ${exception.getClass().getSimpleName()}</p>
        <p>Message: ${exception.getMessage()}</p>
        <p>Cause: ${exception.getCause()}</p>
    </body>
</html>

2. /WEB-INF/views/error/null_error.jsp

<html>
    <body>
        <h1>Hello Null Error!</h1>
        <p>Exception: ${exception.getClass().getSimpleName()}</p>
        <p>Message: ${exception.getMessage()}</p>
        <p>Cause: ${exception.getCause()}</p>
    </body>
</html>

 

테스트하기

이제 직접 Exception을 발생시켜서 해당 뷰페이지로 연결되는 것을 확인해보겠습니다.

먼저 Exception을 발생시키기 위해 Controller에서 세팅해주었습니다.

@RequestMapping(value = "/makeNullException", method = RequestMethod.GET)
public void makeNullException() throws Exception {
    throw new NullPointerException();
}

@RequestMapping(value = "/makeException", method = RequestMethod.GET)
public void makeException() throws Exception {
    throw new Exception();
}

해당 주소로 진입하여 Exception을 발생시키면 아래와 같은 결과가 나오게 됩니다.

SimpleMappingExceptionResolver에서 에러 뷰로 연결된 것입니다.