Spring/Spring MVC

[Spring MVC] 2-4. Handler Methods: Controller Advice

noahkim_ 2023. 10. 17. 10:46

1. Controller Advice

  • 특정 컨트롤러나 전체 컨트롤러에 걸쳐 로직을 중앙화하는데 사용되는 어노테이션입니다.
  • 예외 처리, 바인딩 설정, 모델 어트리뷰트 설정 등에 사용됩니다.
    • @ExceptionHandler, @InitBinder, @ModelAttribute

 

적용 범위

  • 기본적으로 해당 메서드가 선언된 @Controller 내에서만 적용됩니다.
  • @ControllerAdvice나 @RestControllerAdvice 클래스 내에서 선언된 경우, 어느 컨트롤러에서든 적용될 수 있습니다.

 

빈 등록

@ControllerAdvice
  • @ComponentScan 메타-어노테이션되어 있습니다.
  • 컴포넌트 스캔을 통해 스프링 빈으로 등록될 수 있습니다.

 

@RestControllerAdvice
  • @ControllerAdvice@ResponseBody로 메타-어노테이션되어 있습니다.
  • 메서드의 반환 값이 응답 본문의 메시지 변환을 통해 렌더링됩니다.

 

동작 방식

RequestMappingHandlerMapping과 ExceptionHandlerExceptionResolver
  • 컨트롤러 어드바이스 빈을 감지하고 런타임에 적용합니다.

 

@ExceptionHandler 메서드
  • 로컬 메서드가 전역 메서드보다 먼저 적용됩니다.

 

@ModelAttribute와 @InitBinder 메서드
  • 전역 메서드가 로컬 메서드보다 먼저 적용됩니다.

 

적용 범위 제한

  • 적용되는 컨트롤러와 핸들러의 범위를 좁힐 수 있는 속성을 가지고 있습니다.
// Target all Controllers annotated with @RestController
@ControllerAdvice(annotations = RestController.class)
public class ExampleAdvice1 {}

// Target all Controllers within specific packages
@ControllerAdvice("org.example.controllers")
public class ExampleAdvice2 {}

// Target all Controllers assignable to specific classes
@ControllerAdvice(assignableTypes = {ControllerInterface.class, AbstractController.class})
public class ExampleAdvice3 {}

 

출처