Global Exception 적용하기

bw1611·2023년 7월 23일
1

SpringBoot

목록 보기
3/6

Global Exception을 적용하게 된 계기

GlobalExceptionHandler을 적용하기 전에는 Springboot에서 지원하는 오류페이지를 사용하였었다. 물론 이 페이지도 내가 보기에는 괜찮지만 사용자가 보기에는 다소 불편할 수 있고 사이트가 전체적으로 미완성으로 보일 수 있다.

  • Springboot에서 지원해주는 오류 페이지

사이트의 통일성을 헤칠 수 있기에 CustomException과 우리가 만든 오류페이지를 띄워주기로 했다.

GlobalExceptionHandler 적용

  • GlobalExceptionHandler
// 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 내에서 발생하는 에러에 대해서 해당 핸들러에서 캐치하여 오류를 발생시키지 않고 응답 메시지로 클라이언트에게 전달해주는 기능

  • KickedUserEnterException
public class KickedUserEnterException extends RuntimeException{
    public KickedUserEnterException(String message) {
        super(message);
    }
}
  • NoChatRoomException
public class NoChatRoomException extends RuntimeException{
    public NoChatRoomException(String message) {
        super(message);
    }
}

CustomException을 등록하여 상황에 메서드명의 exception을 던져주기로 했다.

  • Custom한 오류 페이지

사이트에 대한 통일감을 주고 사용자에게 좀더 친화적인 오류페이지를 던저줄 수 있다는 장점이 있다. 또한 코드를 봤을 때 어떤 오류를 던저주는 것인지에 대한 가독성을 높여줄 수 있다.


참고 자료

https://adjh54.tistory.com/79

profile
Java BackEnd Developer

1개의 댓글

comment-user-thumbnail
2023년 7월 23일

감사합니다. 이런 정보를 나눠주셔서 좋아요.

답글 달기