[Spring] controller에서 return값 String vs ModelAndView 차이

limlim·2023년 5월 19일
0

Spring

목록 보기
8/8

개요

  • 게시판 만들기 과제를 하면서 controller 부분에서 반환값을 String으로 주었다. (샘플 게시판에서도 String으로 되어있었음) 그런데 어떤 곳에서는 반환값을 ModelAndView로 주었다. 그럼 두가지의 차이는 무엇일까?
  1. 반환값이 String인 경우
  • Spring + View template을 사용할 때 흔히 사용하는 타입
 @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은 구현체였다.

  • 둘 다 스프링 내부적으로는 사용하는 객체의 타입이 동일하기 때문에 개발자의 취향에 따라 선택하여 사용하면 된다.

  1. 반환값이 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");
}

참고자료: https://ooeunz.tistory.com/101

profile
不怕慢,只怕站 개발자

0개의 댓글