@ControllerAdvice는 모든 에러를 잡아주기 때문에, 일부 에러만 처리하고 싶을 경우에는 따로 설정을 해주면 됩니다.
annotations
basePackages
assignableTypes
// 1.
@ControllerAdvice(annotations = TestController.class)
public class TestExampleAdvice1 {
}
// 2.
@ControllerAdvice("org.test.example.controllers")
public class TestExampleAdvice2 {
}
// 3.
@ControllerAdvice(assignableTypes = {TestControllerInterface.class, TestAbstractController.class})
public class TestExampleAdvice3 {
}
Spring은 스프링 예외를 미리 처리해둔 ResponseEntityExceptionHandler를 추상 클래스로 제공하고 있습니다. ResponseEntityExceptionHandler에는 스프링 예외에 대한 ExceptionHandler가 모두 구현되어 있으므로 ControllerAdvice 클래스가 이를 상속받게 하면 됩니다.
@RestController
@RequiredArgsConstructor
public class ProductController {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<ErrorResponse> handleMethodArgumentNotValid(MethodArgumentNotValidException ex) {
...
}
}