반응형
스프링MVC의 핵심개념 중 컨트롤러 레벨에서 공통적인 로직을 적용하려면 어떻게 해야 할까요?
- 정답
- @ControllerAdvice 어노테이션을 사용함.
- 그리고, spring.io 페이지에서는 아래와 같이 설명하고 있네요..
- 1.3.7. Controller Advice
-
Typically @ExceptionHandler, @InitBinder, and @ModelAttribute methods apply within the @Controller class (or class hierarchy) in which they are declared. If you want such methods to apply more globally (across controllers), you can declare them in a class annotated with @ControllerAdvice or @RestControllerAdvice.
-
참고 URL
-
- @ControllerAdvice 어노테이션을 사용함.
- 그럼, @ControllerAdvice 어노테이션에 대해서 알아볼께요.
- 모든 Controller 전반에 걸쳐서 아래 로직을 적용할 수 있습니다.
- 바인딩 설정( @InitBinder )
- 모델 객체 ( @ModelAttributes )
- 예외 처리 ( @ExceptionHandler )
- 모든 Controller 전반에 걸쳐서 아래 로직을 적용할 수 있습니다.
그럼, @ControllerAdvice 어노테이션에 대해서 자세히 알아볼께요.
- @ControllerAdvice 선언부
- 그리고, 적용 범위에 대해서 간단하게 설명하자면,
- 디폴트는, 모든 Controller에 적용되는 특징이 있습니다.
- 하지만, 특정 Controller에 적용할 수 도 있습니다.
- 그럼 어떻게 하면 될까요?
- spring,io 페이지에서 예시를 가져와 봅니다
- 그럼 어떻게 하면 될까요?
- 설명
- 첫번째는, @RestController 어노테이션을 사용한 모든 컨트롤러
- 두번째는, 특정 패키지안의 모든 컨트롤러
- 세번째는, 특정 클래스의 모든 컨트롤러
그럼, 간단한 예시를 통해서 설명해 볼께요.
- 바인딩 설정( @InitBinder ) 예시
- 보통 @InitBinder 어노테이션을 사용하면,
- Controller로 들어오는 요청에 대해 추가적인 설정을 할 수 있음.
- 즉, 모든 요청전에 InitBinder를 선언한 메소드가 실행됨
- 그리고, 스프링프레임워크에서의 바인딩이란 모델 클래스(오브젝트)의 프로퍼티(메서드 set)에 값을 넣는 것을 말함.
- 보통 @InitBinder 어노테이션을 사용하면,
- 예시
- 설명
- 폼 바인딩에 사용할 기본날짜 형식을 설정하는 예시임.
결론
- 컨트롤러 레벨에서 공통적인 로직을 적용하가위해서 스프링은 @ControllerAdvice 어노테이션을 지원함.
- @ControllerAdvice 어노테이션이 적용되는 범위는 디폴트로 모든 Controller에 적용되는 특징이 있지만, 설정을 통해서 특정 Controller를 지정할 수 있음.
- 오늘도 컨트롤러 레벨에서 공통적인 로직을 적용하는 방법에 대한 마술(?) 한가지 획득완료! 감사합니다. ^^
300x250
'좋아하는 것_매직IT > 1.spring' 카테고리의 다른 글
18.Spring, 스프링 데이터 JPA(Java Persistence API)에 대해서 알아 볼께요. (0) | 2021.01.15 |
---|---|
17.Spring, 스프링관련 자바 웹어플리케이션 레이어(Layer) 및 전반적인 구성 요소에 대해서 알아보자. (0) | 2021.01.04 |
15.Spring, 스프링MVC의 핵심개념 중 세션속성(SessionAttribute)에 대해서 알아볼께요. (0) | 2021.01.02 |
14.Spring, 스프링MVC의 핵심개념 중 모델속성(ModelAttribute)에 대해서 알아볼께요. (0) | 2021.01.02 |
13.Spring, 스프링MVC의 핵심개념 중 인터셉터(Interceptor)와 핸들러매핑(HandlerMapping)에 대해서 알아볼께요. (0) | 2021.01.02 |