예외 처리할 때 try-catch를 사용하다보니 소스코드가 중복되고 복잡해졌다.
이를 해결하기 위해 ControllerAdvice를 사용해보았다.
@Controller나 @RestController에서 발생한 예외를 한 곳에서 처리할 수 있도록 해준다.
@RestControllerAdvice는 @ControllerAdvice + @ResponseBody이다.
AOP 방식을 활용해 예외를 처리한다.
컨트롤러의 메소드나 @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());
}
}
https://jeong-pro.tistory.com/195
https://mangkyu.tistory.com/204