[Spring]@ModelAttribute 어노테이션의 기능과 사용법
반응형
Inflearn의 김영한님의 스프링 MVC 1편 -백엔드 웹 개발 핵 기술 강의를 참고하여 작성한 내용입니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1
👉@ModelAttribute의 기능
개발을 하다보면 아래와 같이 요청 파라미터를 받아 필요한 객체를 만들고 그 객체에 값을 넣어주어야 한다.
@RequestParam String username;
@RequestParam int age;
HelloData data = new HelloData();
data.setUsername(username);
data.setAge(age);
Spring은 @ModelAttribute을 통해 위 과정을 자동화해준다.
아래는 요청 파라미터를 바인딩 받을 객체이다.
package hello.springmvc.basic;
import lombok.Data;
@Data
public class HelloData {
private String username;
private int age;
}
@Data는 @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor를 적용시켜주는 어노테이션이다.
👉@ModelAttribute 적용
@ResponseBody
@RequestMapping("/model-attribute-v1")
public String modelAttributeV1(@ModelAttribute HelloData helloData) {
log.info("username={}, age={}", helloData.getUsername(),
helloData.getAge());
return "ok";
}
Spring MVC는 @ModelAttribute를 아래와 같이 실행한다.
1. HelloData객체 생성
2. 요청 파라미터의 이름으로 HelloData객체의 프로퍼티를 찾고 해당 프로퍼티의 setter를 호출해 파라미터의 값을 바인딩
3. 파라미터 이름이 username이면 setUsername()메서드를 찾아 호출하면서 값을 입력
아래와 같이 @ModelAttribute를 생략할 수 있다.
@ResponseBody
@RequestMapping("/model-attribute-v2")
public String modelAttributeV2(HelloData helloData) {
log.info("username={}, age={}", helloData.getUsername(),
helloData.getAge());
return "ok";
}
@RequestParam도 생략가능하므로 헷갈리지 않도록 한다.
-String, int, Integer같은 단순 타입 = @RequestParam
-나머지 = @ModelAttribute(argument resolver로 지정해둔 타입 외)
반응형
'Spring Boot' 카테고리의 다른 글
[Spring] Grafana와 Prometheus로 서버 모니터링 하기 (0) | 2023.07.07 |
---|---|
[Spring] Spring MVC의 구조 (0) | 2023.06.03 |
[Spring] Spring boot JPA사용해 로그인, 회원가입 구현 (0) | 2023.05.29 |
[Spring]메시지와 국제화 (0) | 2023.05.12 |
[Spring]Spring Boot로 Hello World찍기 (0) | 2023.01.29 |
댓글