개요
String
으로 주었다. (샘플 게시판에서도 String
으로 되어있었음) 그런데 어떤 곳에서는 반환값을 ModelAndView
로 주었다. 그럼 두가지의 차이는 무엇일까?
- 반환값이
String
인 경우
@GetMapping("/test")
public String test(Model model) {
model.addAttribute("data", data);
return "/test/data";
}
Model
안에 데이터를 key, value 값으로 담고 return 타입을 String 값으로 뷰의 이름을 지정해주면 뷰로 데이터가 전송됨
그럼 뷰에서는 해당 데이터의 key값을 객체 이름으로 하여 그 안에 데이터를 조회함
<body>
<p>${data.name}</p>
<p>${data.age}</p>
</body>
추가사항으로 과제를 하다보니 어떤 부분에서는 Model
을 사용하고, 어떤 부분에서는 ModelMap
을 사용하였다.
찾아보니 Model
은 인터페이스고, ModelMap
은 구현체였다.
둘 다 스프링 내부적으로는 사용하는 객체의 타입이 동일하기 때문에 개발자의 취향에 따라 선택하여 사용하면 된다.
- 반환값이
ModelAndView
인 경우
Model과 View를 동시에 설정가능한 객체임
Controller는 ModelAndView 객체만을 반환하지만 Model과 View를 모두 가지고 반환함
생성자로 뷰의 이름을 저장하거나 setViewName() 메서드를 사용하여 뷰 네임을 지정하고, addObject() 메서드로 데이터를 저장함
@GetMapping("/test")
public ModelAndView test() {
ModelAndView mav = new ModelAndView("test/viewPage");
modelAndView.addObject("data", "Hi");
return mav;
}
@GetMapping("/test2")
public ModelAndView test2() {
return new ModelAndView("test2/viewPage");
}