GlobalExceptionHandler을 적용하기 전에는 Springboot에서 지원하는 오류페이지를 사용하였었다. 물론 이 페이지도 내가 보기에는 괜찮지만 사용자가 보기에는 다소 불편할 수 있고 사이트가 전체적으로 미완성으로 보일 수 있다.
사이트의 통일성을 헤칠 수 있기에 CustomException과 우리가 만든 오류페이지를 띄워주기로 했다.
// 1,
@Controller
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = IllegalArgumentException.class)
public String illegalArgumentException(Exception e, Model model){
model.addAttribute("errorMessage",e.getMessage());
return "error/commonError";
}
@ExceptionHandler(value = NoSuchElementException.class)
public String noSuchElementException(Exception e, Model model){
model.addAttribute("errorMessage",e.getMessage());
return "error/commonError";
}
@ExceptionHandler(value = HttpRequestMethodNotSupportedException.class)
public String httpRequestMethodNotSupportedException(Exception e, Model model){
model.addAttribute("errorMessage",e.getMessage());
return "error/commonError";
}
@ExceptionHandler(value = HttpClientErrorException.BadRequest.class)
public String httpClientErrorExceptionBadRequest(Exception e, Model model){
model.addAttribute("errorMessage",e.getMessage());
return "error/commonError";
}
// 커스텀
@ExceptionHandler(value = KickedUserEnterException.class)
public String KickedUserEnterException(Exception e, Model model){
model.addAttribute("errorMessage",e.getMessage());
return "error/kickedError";
}
@ExceptionHandler(value = NullPointerException.class)
public String nullPointException(Exception e, Model model){
model.addAttribute("errorMessage",e.getMessage());
return "error/commonError";
}
// 커스텀
@ExceptionHandler(value = NoChatRoomException.class)
public String NoChatRoomException(Exception e, Model model){
model.addAttribute("errorMessage",e.getMessage());
return "error/noChatroomError";
}
}
1,
GlobalExceptionHandler
란?
@ControllerAdvice / @RestControllerAdvice과 @ExceptionHandler 어노테이션을 기반으로 Controller 내에서 발생하는 에러에 대해서 해당 핸들러에서 캐치하여 오류를 발생시키지 않고 응답 메시지로 클라이언트에게 전달해주는 기능
public class KickedUserEnterException extends RuntimeException{
public KickedUserEnterException(String message) {
super(message);
}
}
public class NoChatRoomException extends RuntimeException{
public NoChatRoomException(String message) {
super(message);
}
}
CustomException을 등록하여 상황에 메서드명의 exception을 던져주기로 했다.
사이트에 대한 통일감을 주고 사용자에게 좀더 친화적인 오류페이지를 던저줄 수 있다는 장점이 있다. 또한 코드를 봤을 때 어떤 오류를 던저주는 것인지에 대한 가독성을 높여줄 수 있다.
참고 자료
감사합니다. 이런 정보를 나눠주셔서 좋아요.