예외 처리를 위한 메서드를 작성하고 @ExceptionHandler를 붙인다.
@ControllerAdvice로 전역 예외 처리 클래스 작성 가능(패키지 지정 가능)
예외 처리 메서드가 중복인 경우, 컨트롤러 내의 예외 처리 메서드가 우선.
응답 메세지의 상태 코드를 변경할 때 사용
@ResonseStatus(HttpStatus.METHOD_NOT_ALLOWED) //405 Method Not Allowed.
@ExceptionHandler({NullPointerException.class, ClassCastException.class}) {
public String catcher2(Exception ex, Model m)
m.addAttribute("ex", ex);
return "error";
}
@ResponseStatus(HttpStatus.BAD_REQUEST) //400 Bad Request.
class MyException extends RuntimeException {
MyExeption(String msg) {
super(msg);
}
MyException() {
this("");
}
}
상태 코드별 뷰 맵핑
<error-page>
<error-code>400</error-code>
<location>/error400.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error500.jsp</location>
</error-page>
예외 종류별 뷰 맵핑에 사용. servlet-context.xml에 등록
<beans:bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<beans:property name="defaultErrorView" value="error"/>
<beans:property name="exceptionMappings">
<beans:props>
<beans:prop key="com.fastcampus.ch2.MyException">error400</beans:prop>
</beans:props>
</beans:property>
<beans:property name="statusCodes">
<beans:props>
<beans:prop key="error400">400</beans:prop>
</beans:props>
</beans:property>
</beans:bean>
스프링의 예외처리 기본전략
handlerExceptionResolver
1. ExceptionHandlerExceptionResolver
2. ResponseStatusExceptionResolver
3. DefaultHandlerExceptionResolver
<error-page>
- web.xml