실제 개발을 할 때, 요청 파라미터를 받아서 필요한 객체를 생성한 뒤에 객체에 값을 setXXX 을 통해 해주는게 정석적인 방법이다.
그렇다면 대충 코드는 다음과 같을 것이다.
@RequestParam String username;
@RequestParam int age;
HelloData data = new HelloData();
data.setUsername(username);
data.setAge(age);
스프링은 위 과정을 완전히 자동화 해주는 @ModelAndAttribute 에노테이션 기능을 제공한다.
@ModelAndAttribute 써보기
파라미터를 바인딩 받을 객체 - HelloData
package hello.springmvc.basic;
import lombok.Data;
@Data
public class HelloData {
private String username;
private int age;
}
편의상 생성자, getter , setter 등을 모두 만들어주는 롬복의 @Data 에노테이션을 썼다.
@ModelAndAttribute 적용
@ResponseBody
@RequestMapping("/model-attribute-v1")
public String modelAttributeV1(@ModelAttribute HelloData helloData) {
log.info("username={}, age={}", helloData.getUsername(), helloData.getAge());
log.info("helloData={}", helloData);
return "ok";
}
http://localhost:8080/model-attribute-v1?username=sss&age=124 라는 경로로 접근 했을 때, 로그를 보자
자동으로 객체가 생성된 것을 확인할 수 있다.
어떻게 동작 하는거지?
스프링 MVC는 @ModelAndAttribute가 있으면 다음과 같은 순서로 동작한다
1. HelloData 객체를 생성한다.
2. 요청 파라미터의 이름으로 HelloData 객체의 프로퍼티(getXXX, setXXX)를 찾는다.
3. 프로퍼티의 setXXX 메서드를 통해 파라미터의 값을 바인딩 한다.
즉, 우리가 처음에 생각했던 방식이 그대로 동작한다.
스프링은 이러한 기능을 통해 편리하게 파라미터를 객체에 바인딩할 수 있다 !
'Spring > MVC' 카테고리의 다른 글
[Spring] 메시지와 국제화 - 어떻게 국제화가 자동으로 일어날까요? (0) | 2025.07.03 |
---|---|
[Spring] Spring MVC가 제공하는 Request 매핑 기능 (0) | 2025.06.24 |
[Spring] Spring MVC - 스프링이 제공하는 컨트롤러 (0) | 2025.06.23 |
[Spring] 내가 만든 MVC 와 Spring MVC 차이 (1) | 2025.06.23 |
[Spring] FrontController V5(完) - 다양한 인터페이스 구현체 처리하기 (2) | 2025.06.23 |