본문 바로가기
WEB/Spring

@ModelAttribute

by Zayne 2023. 3. 1.

 

지금까지는 요청 파라미터로 객체를 받을 때 @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