[개인공부][Spring] - @ControllerAdvice를 통한 예외 처리

Mini_me·2022년 1월 5일
0

공부 [Spring]

목록 보기
8/27

예외 처리

에러 처리 방법은 크게 세가지가 있다.
1. ErrorPage
2. 4xx Error / 5xx Error
3. Client가 200외에 처리를 하지 못할 경우 200을 내려주고 별도의 에러 메세지를 전달

커스텀 에러 페이지

BasicErrorController

SpringBoot에서는 기본적으로 BasicErrorController가 등록이 되어 해당 요청을 처리한다.
BasicErrorController의 핸들러 메소드

  • BasicErrorController.errorHtml() : View 응답

  • BasicErrorController.error() : json body 응답

    간단히 static html, template파일 추가하여 커스텀 에러페이지 등록

    ExceptionHandler

  • 비즈니스 로직이 던진 예외에 반응하는 핸들러 메소드이다.

  • 위치는 특정 클래스 내부 혹은 @ControllerAdvice 컴포넌트 내부이다.

  • 예외를 입력 인자로 다룰 수 있다.

  • 컨트롤러안에 작성했을 경우에는 해당 컨트롤러만,

  • @ControllerAdvice에 작성했을 경우에는 프로젝트 전체로 예외 처리 범위가 지정된다.


APIEventController.class의 일부 코드 캡처 화면이다.
에러가 일어나도록 설정 후, 예외를 던져준다.

ResponseEntity는 개발자가 직접 결과 데이터와 HTTP 상태 코드를 제어할 수 있는 클래스이다.
위의 사진에서 GeneralException이 발생했으므로 ResponseEntity에서 만약 Clientside에러인지, severSideError인지 확인하여 클라이언트 문제라면 bad_request, 서버문제라면 Internealservererror로 httpstatus를 설정한다.
그 후 HTTP status와 httpbody를 반환한다.

APIEventController에 대해서만 예외처리한다.
해당 컨트롤러에 대해서만 예외처리한다.



BasseExceptionController에서 일어난 예외가 아니라 BaseController에서 일어난 에러 처리 가능
전체 컨트롤러에 대해 예외처리한다.

ControllerAdvice?

@Controller , @RestController에서 발생한 예외를 한 곳에서 처리 및 관리 할 수 있게 도와주는 annotation

@ExceptionHandler을 모아서 글로벌하게 적용할 때 쓰는 annotation이다.

@RestControllerAdvice=@ControllerAdvice + @ResponseBody

ResponseEntityExceptionHanlder

스프링 MVC에서 내부적으로 발생하는 예외들을 처리하는 클래스
API 예외 처리를 담당하는 @controllerAdvice 클래스에서 상속 받아 사용
커스터마이징을 원하는 특정 메소드를 오버라이드

0개의 댓글