ModelAttribute
실제 개발을 하면 요청 파라미터를 받아서 필요한 객체를 만들고 그 객체에 값을 넣어주어야 한다.
스프링은 자동화해주는 @ModelAttribute 기능을 제공한다.
import lombok.Data;
@Data
public class HelloData {
private String username;
private int age;
}
롬복 @Data
@Getter, @Setter, @ToString, @EqualAndHashCode, @RequiredArgsConstrutor를 자동으로 적용해준다.
ModelAttribute - v1
@ResponseBody
@RequestMapping("/model-attribute-v1")
public String modelAttributeV1(@ModelAttribute HelloData helloData){
log.info("username={}, age={}", helloData.getUsername(), helloData.getAge());
return "ok";
}
스프링MVC는 @ModelAttribute가 있으면 다음을 실행한다.
- HelloData 객체를 생성한다.
- 요청 파라미터의 이름으로 HelloData 객체의 프로퍼티를 찾는다. 그리고 해당 프로퍼티의 setter를 호출해서 파라미터의 값을 입력(바인딩)한다.
- 예) 파라미터 이름이 username이면 setUsername() 메서드를 찾아서 호출하면서 값을 입력한다.
ModelAttribute - v2
@ResponseBody
@RequestMapping("/model-attribute-v2")
public String modelAttributeV2(HelloData helloData){
log.info("username={}, age={}", helloData.getUsername(), helloData.getAge());
return "ok";
}
@ModelAttribute는 생략할 수 있다.
그런데 @RequestParam도 생략할 수 있으니 혼란이 발생할 수 있다.
스프링은 해당 생략시 다음과 같은 규칙을 적용한다.
- String, int, Integer 같은 단순 타입 = @RequsetParam
- 나머지 = @ModelAttribute (argument resolver로 지정해둔 타입 외)
해당 내용은 김영한님의 인프런 강의 "스프링 MVC 1편"을 참고하여 정리한 글 입니다.
'Spring' 카테고리의 다른 글
[String] HTTP 요청 메시지 - JSON (0) | 2024.05.20 |
---|---|
[String] HTTP 요청 메시지 - 단순 텍스트 (0) | 2024.05.20 |
[Spring] HTTP 요청 파라미터 - @RequestParam (0) | 2024.05.20 |
[Spring] HTTP 요청 파라미터 - 쿼리 파라미터, HTML Form (0) | 2024.05.17 |
[Spring] HTTP 요청 - 기본, 헤더 조회 (0) | 2024.05.17 |