@ModelAttribute 선언 후 자동으로 진행되는 작업
1. @ModelAttribute 어노테이션이 붙은 객체를 자동으로 생성한다.
이 때 @ModelAttribute가 지정되는 클래스는 빈 클래스여야 한다.
그리고 getter와 setter가 명명 규칙에 맞게 만들어져 있어야 한다.
생성된 오브젝트에 HTTP로 넘어 온 값들을 자동으로 바인딩한다.
@ModelAttribute 어노테이션이 붙은 객체가 자동으로 Model 객체에 추가되고 view까지 전달된다.
URL
http://localhost:8080/member/info?name=Gildong&age=25&seq=327
MemberInfo DTO
@Getter @Setter
public class MemberInfo
{
private int seq;
private String name;
private int age;
}
@Controller
@RequestMapping("member")
public class MemberController
{
@GetMapping(value="info")
public void show(@RequestParam("seq") int seq, @ModelAttribute("myMember") MemberInfo info, Model model){
logger.info("##### info.getName() " + info.getName());
logger.info("##### info.getAge() " + info.getAge());
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
Insert title here위의 코드에서는 MemberInfo 클래스의 객체 info를 자동으로 생성한다.
이때 @ModelAttribute가 지정되는 MemberInfo 클래스는 빈 클래스여야 한다.
getter와 setter가 명명 규칙에 맞게 만들어져 있어야 한다.
생성된 오브젝트(info) HTTP로 넘어 온 값들을 자동으로 바인딩한다.
name=Gildong&age=25&seq=327 이렇게 들어오는 name, age, seq의 값이 MemberInfo의 해당 변수의 setter를 통해서 해당 멤버 변수로 binding 된다.
@ModfelAttribute 어노테이션이 붙은 객체가(MemberInfo) 자동으로 Model 객체에 추가되고 따라서 MemberInfo 객체가 .jsp 뷰단까지 전달이 된다
MemberInfo 객체가 Model 객체에 추가될 때 @ModelAttribute()의 괄호 안에 지정한 문자열의 이름으로 추가된다.