지금까지는 요청 파라미터로 객체를 받을 때 @ModelAttribute를 사용해주었다.
다음 코드로 복습해보자
@ResponseBody
@RequestMapping("/model-attribute-v1")
public String modelAttributeV1(@ModelAttribute HelloData helloData) {
log.info("username={}, age={}", helloData.getUsername(), helloData.getAge());
return "ok";
}
@ModelAttribute 가 없었더라면 HelloData 객체를 생성해주고 setter 로 받은 값들을 넣어주어야 한다.
요청 파라미터의 이름으로 setter를 호출하는데 만약 파라미터의 이름이 username 이면
setUsername() 메소드를 찾아서 호출하고 값을 입력한다.
그리고 @ModelAttribute 를 다음과 같이 컨트롤러에 있는 메소드에도 적용할 수 있다.
@ModelAttribute("regions")
public Map<String, String> regions() {
Map<String, String> regions = new LinkedHashMap<>(); // HashMap과 달리 순서가 보장
regions.put("SEOUL", "서울");
regions.put("BUSAN", "부산");
regions.put("JEJU", "제주");
return regions;
}
이렇게하면 이 메소드가 있는 컨트롤러를 요청할 때 regions() 에서의 반환 값이 자동으로 모델에 담기게 된다.
model.addAttribute("regions",regions);
그리고 해당 컨트롤러 내에 있는 모든 메소드에 적용된다.
@ModelAttribute 의 기능 정리
1. 요청 파라미터에 사용 시
- 객체 자동 생성
- setter 호출하여 입력 값 바인딩
- model.addAttribute() 자동 추가
2. 메소드에 사용시
- 해당 메소드가 있는 컨트롤러 호출 시 해당 컨트롤러의 모든 메소드에 model.addAttribute() 적용
'WEB > Spring' 카테고리의 다른 글
스프링 빈 (0) | 2023.04.10 |
---|---|
DI(Dependency Injection) : 의존관계 주입 (0) | 2023.04.07 |
IoC(Inversion of Control) : 제어의 역전 (0) | 2023.04.06 |
객제 지향 설계의 5가지 원칙(SOLID) (0) | 2023.04.02 |
로깅 (0) | 2023.02.26 |