BookController 클래스에 422 오류가 났을 경우 처리할 메소드를 추가합니다. 422 오류는 "책 정보가 없을" 경우에도 나지만, "유효성 검사가 실패할 경우"에도 난다고 가정합니다.
src/main/java > com.yse.dev.book > BookController.java
private ModelAndView error422(String message, String location) {
ModelAndView mav = new ModelAndView();
mav.setStatus(HttpStatus.UNPROCESSABLE_ENTITY);
mav.addObject("message", message);
mav.addObject("location", location);
mav.setViewName("common/error/422");
return mav;
}
코드의 내용은 noSuchElementExceptionHandler 메소드와 동일하므로 설명은 생략하겠습니다. 달라진 점은 noSuchElementExceptionHandler가 NoSuchElementException을 매개변수로 취하는 데 반해 보여질 message와 이동할 페이지 location를 매개변수로 받는다는 점만 다릅니다.
error422 메소드는 사실 noSuchElementExceptionHandler의 내용을 복사해서 수정한 겁니다. 같은 역할을 하는 로직이 두군데 이상 분산되는 것은 좋지 않기 때문에 noSuchElementExceptionHandler를 수정해서 error422 메소드를 이용하는 방식으로 바꿔볼께요.
기존 코드는 아래와 같습니다.
@ExceptionHandler(NoSuchElementException.class)
public ModelAndView noSuchElementExceptionHandler(NoSuchElementException ex) {
ModelAndView mav = new ModelAndView();
mav.setStatus(HttpStatus.UNPROCESSABLE_ENTITY);
mav.addObject("message", "책 정보가 없습니다.");
mav.addObject("location", "/book/list");
mav.setViewName("common/error/422");
return mav;
}
변경된 코드는 이렇습니다.
@ExceptionHandler(NoSuchElementException.class)
public ModelAndView noSuchElementExceptionHandler(NoSuchElementException ex) {
return this.error422("책 정보가 없습니다.", "/book/list");
}