유효하지 않은 요청 데이터가 API 계층으로 와서 예외가 발생할 때, 클라이언트쪽으로 요청 데이터가 유효하지 않다는 정보를 가진 ResponseEntity
객체를 반환하는 메서드가 있다고 가정할 때,
@ExceptionHandler
public ResponseEntity 예외처리메서드이름(발생한예외) {
~~~
}
이런 식으로 Controller 클래스에 메서드가 구현되어있으면, API 계층으로 전달된 요청데이터가 유효하지 않아서 예외를 발생하게 될 때, @ExceptionHandler 애너테이션이 있고, 발생한 예외에 대한 객체를 동일한 매개변수로 가지는 메서드가 있을 때,
컨트롤러 내에서 구현된 메서드가 그 예외를 처리해서 요청데이터가 유효하지 않다는 메세지의 정보를 가지고 있는 ResponseEntity
객체를 클라이언트로 보내준다.
해당 발생하는 예외마다 Controller에서 ExceptionHandler메서드를 계속 추가로 구현해줘야 한다.
특정 클래스에서 이 애너테이션을 추가하면 여려 개의 Controller클래스에서 @ExceptionHandler
,@InitBinder
,@ModelAttribute
가 추가된 메서드를 공유해서 사용가능하다.
즉, 이 애너테이션을 추가한 클래스를 이용하면 예외처리를 공통화 할 수 있다는 것이다.
컨트롤러 메서드 앞에 붙일 수 있는 애너테이션으로써 값으로 응답상태코드를 지정할 수 있다.
쉽게 생각하면, @RestControllerAdvice는 @ControllerAdvice
+@ResponseBody
라고 할 수 있다..
enum으로 정의하는 것이 좋다. enum으로 정의하면 비즈니스로직에서 발생하는 다양한 유형의 예외를 enum에 추가해서 사용할 수 있다.
커밋 ㅇ