@Controller + String 반환 메서드는 view 조회 🙆♂️
@Controller
public class ResponseViewController {
@RequestMapping("/response-view-v2")
public **String responseViewV2(Model model**) {
model.addAttribute("data", "hello!");
return "response/hello";
}
}
/**
* 잘못된 코드 @ModelAttribute Model model
*/
@Controller
public class ResponseViewController {
@RequestMapping("/response-view-v2")
public String responseViewV2(**@ModelAttribute Model model**) {
model.addAttribute("data", "hello!");
return "response/hello";
}
}
/**
* OK
*/
@Controller
public class ResponseViewController {
@RequestMapping("/response-view-v2")
public String responseViewV2(@ModelAttribute HelloData helloData) {
//...
}
}
@ModelAttribute 어노테이션이 붙은 객체를 자동으로 생성한다.
위의 코드에서는 HelloData 클래스의 객체 helloData를 자동으로 생성한다.
이때 @ModelAttribute가 지정되는 클래스는 빈 클래스라야 한다.
즉 HelloData 클래스는 beans 클래스라야 한다.
그리고 getter와 setter가 명명 규칙에 맞게 만들어져 있어야 한다.
생성된 오브젝트에(info) HTTP로 넘어 온 값들을 자동으로 바인딩한다.
위의 코드의 경우는 username=park&age=25 이렇게 들어오는
username, park의 값이 HelloData 의 해당 변수의 setter를 통해서
해당 멤버 변수로 binding된다.
@ModelAttribute 어노테이션이 붙은 객체가(여기서는 HelloData 객체) 자동으로 Model 객체에 추가되고 따라서 HelloData 객체가 Model에 포함된 상태로 render