-
API예외처리 하는법2(global)처리 - @ControllerAdvice, @RestControllerAdviceSPRING/API 예외처리 2021. 10. 30. 11:03반응형
스프링 부트에서 API예외처리를 글로벌하게 처리하는 방법을 알아보겠습니다.
이전 글 에서는 해당 컨트롤러에서만 예외 처리 적용이 되게 설정을 하였다면, 이번 글에선 글로벌하게 처리하는 법을 알아보겠습니다. [이전 스프링 부트에서 API예외 처리하는 법 글을 보지 않으셨던 분은 꼭 보고 와 주세요!]
우선 이전 코드를 보겠습니다.
보시다시피 정상 코드와 예외처리 코드가 하나의 컨트롤러에 섞여있습니다.
정상 코드와 예외 처리 코드를 분리하고 싶다면 @ControllerAdvice 또는 @RestControllerAdvice를 사용하면
둘을 분리할 수 있습니다.이 둘의 차이점을 보기 위해 RestControllerAdvice 내부 코드를 캡처
@ControllerAdvice는 대상으로 지정한 여러 컨트롤러에 @ExceptionHandler , @InitBinder 기능을 부여해주는 역할을 한다. [아래 그림 참고]
@ControllerAdvice에 대상을 지정하지 않으면 모든 컨트롤러에 적용된다. (글로벌 적용) [아래 그림 참고]
@RestControllerAdvice는 @ControllerAdvice와 같고, @ResponseBody 가 추가되어 있다.
-> RestControllerAdvice = @ControllerAdvice + @ResponseBody
@Controller , @RestController의 차이와 같다.그럼 이제, 바로 한번 적용해 보겠습니다.
우선 ApiExceptionV2 Controller에 있는 @ExceptionHandler코드를 모두 분리해보겠습니다.
분리 한 코드를 그대로 ExRestControllerAdvice.class에 옮겨보겠습니다.
[주석 참고]
특정 애노테이션이 있는 컨트롤러를 지정할 수 있고, 특정 패키지를 직접 지정할 수도 있다.
패키지 지정의 경우 해당 패키지와 그 하위에 있는 컨트롤러가 대상이 된다.
그리고 특정 클래스를 지정할 수도 있고. 대상 컨트롤러 지정을 생략하면 모든 컨트롤러에 적용된다.
https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-anncontroller- advice (스프링 공식 문서)모든 설정이 끝났습니다.
끝으로 글로벌하게 처리가 되었는지 확인해보겠습니다.
참고 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2 (김영한님 스프링 2편)
반응형'SPRING > API 예외처리' 카테고리의 다른 글
스프링 부트에서 API예외처리 하는법 (4) 2021.10.21