jiny

Spring Controller 응답 시, 항상 Model에 공통 속성을 넣어서 응답하고 싶을 때 본문

Project/작은 지식

Spring Controller 응답 시, 항상 Model에 공통 속성을 넣어서 응답하고 싶을 때

ongjiny 2023. 1. 30. 22:18

@CotrollerAdvice 가 적용된 클래스는 지정한 범위의 컨트롤러에 공통으로 사용될 설정을 지정할 수 있습니다

컨트롤러에 공통으로 사용될 설정은 익셉션 처리, Model 에 속성 넣기 등 다양하게 가능합니다

 

 

1
2
3
4
5
6
7
8
9
10
11
@ControllerAdvice("abc")
public class CommonController {
 
    @GetMapping("/accounts/{id}")
    @ModelAttribute("myAccount")
    public Account handle() {
    // ...
    return account;
    }
 
}
cs

@ModelAttribute 가 위와같이 메소드 레벨에 있다면 @RequestMapping(여기서는 GetMapping) 메소드의 반환 값이 모델 속성이라고 볼 수 있습니다.

즉 Model.addAttribute() 를 사용한 것과 동일합니다.

메소드 인자에 사용한 것처럼 특별한 이름을 지정하고 싶으면 @ModelAttribute("name") 이렇게 사용이 가능합니다

 

그리고 중요한 점은 @ModelAttribute 애노테이션은 @RequestMapping 메소드 호출되기 전에 작동합니다

즉 abc 패키지에 포함된 컨트롤러가 아래와 같다면

abc 패키지에 있는 컨트롤러

"/" 요청을 보내면 home() 메서드가 실행되기 전에 @CotrollerAdvice 클래스 내부의 @ModelAttribute메서드가 실행됩니다

그리고 Model에 직접 지정한 "myAccount" 라는 이름으로 Account의 데이터를 타임리프,JSP와 같은 View에서 사용이 가능합니다

 

 

참고 출처

1. https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-modelattrib-methods

 

Web on Servlet Stack

Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, "Spring Web MVC," comes from the name of its source module (spring-webmvc), but it is more commonl

docs.spring.io

(공식 문서를 해석하여 잘못된 번역이 있을 수 있습니다.)