[Spring] ControllerAdvice

개발자·2022년 2월 23일
0

Spring

목록 보기
10/18
post-thumbnail
post-custom-banner

예외 처리할 때 try-catch를 사용하다보니 소스코드가 중복되고 복잡해졌다.
이를 해결하기 위해 ControllerAdvice를 사용해보았다.

ControllerAdvice란?

@Controller나 @RestController에서 발생한 예외를 한 곳에서 처리할 수 있도록 해준다.
@RestControllerAdvice는 @ControllerAdvice + @ResponseBody이다.
AOP 방식을 활용해 예외를 처리한다.

ExceptionHandler

컨트롤러의 메소드나 @ControllerAdvice와 @RestControllerAdvice가 붙은 클래스의 메소드 내부에 사용해 예외를 처리해 준다.
Exception 클래스들을 파라미터로 받아 처리할 예외를 지정한다.
여러 개를 지정할 수 있다.
이 때❗️ ExceptionHandler를 ControllerAdvice와 함께 사용하지 않으면 선언한 Controller에 대해서만 예외를 처리해준다.

예제

클래스를 생성해 @ControllerAdvice 어노테이션을 붙여주면 된다.
그 후에 @ExceptionHandler를 Exception 클래스마다 설정해 처리해준다.

@RestControllerAdvice
@Slf4j
public class ControllerExceptionHandler {
    private static final Logger log = LoggerFactory.getLogger(this.getClass());
    
    @ExceptionHandler(value = { CommonException.class })
    protected ResponseEntity<ErrorResponse> handleCommonException(CommonException e) {
      log.error("handleCommonException : {}", e.getErrorCode());
      return ErrorResponse.toResponseEntity(e.getErrorCode());
    }
}

장점

  • 하나의 클래스로 모든 컨트롤러에 대한 예외 처리가 가능하다.
  • try-catch문의 반복을 줄여 코드의 가독성을 높일 수 있다.

Ref.

https://jeong-pro.tistory.com/195
https://mangkyu.tistory.com/204

profile
log.info("공부 기록 블로9")
post-custom-banner

0개의 댓글