스프링에서는 크게 세 가지 예외 처리 방법이 있다. try~catch문을 이용한 기존 자바의 예외 처리 방식은 스프링에서 그렇게 자주 사용되지 않는다. 그것을 제외한 다른 두 가지 방법을 공부해보자!
컨트롤러 하나에서 이뤄지는 모든 예외를 처리할 수 있다.
//** 클래스 내부에 작성 **
@ExceptionHandler(Exception.class)
// 처리할 Exception 종류
public String exceptionHandler(Exception e, Model model) { //매개변수로 예외를 받는다
e.printStackTrace();
// 에러 원인을 콘솔에 찍는다.
model.addAttribute("errorMessage", "서비스 이용 중 문제가 발생했습니다.");
model.addAttribute("e", e);
// 에러 처리용 페이지에서 보여줄 값을 attribute에 담아준다.
return "common/error";
// 에러 처리용 페이지에서 화면 구성을 해준다.
}
// 전역에서 처리할 클래스를 만들어 사용할 수 있다.
// @ControllerAdvice는 전역의 @Controller에서 발생한 오류를 잡아준다.
@ControllerAdvice
public class ExceptionController {
// 내부에 처리할 Exception을 작성해준다.
@ExceptionHandler(SQLException.class)
public String exceptionHandler(Exception e, Model model) {
e.printStackTrace();
model.addAttribute("errorMessage", "서비스 이용 중 문제가 발생했습니다.");
model.addAttribute("e", e);
return "common/error";
}
// 여러가지 예외 처리 가능
@ExceptionHandler(NullPointerException.class)
public String exceptionHandler(Exception e, Model model) {
e.printStackTrace();
model.addAttribute("errorMessage", "서비스 이용 중 문제가 발생했습니다.");
model.addAttribute("e", e);
return "common/error";
}
}