MVC 모델을 사용하다보면 Controller 페이지를 자주 들락날락 할 것이다.
나 또한 이번 프로젝트를 하면서 Controller에 자주 들락날락거리며 여러번 코드를 짜고, 수정하고,지웠다.
보면서 여러 return 타입이 있다는걸 알고 이에 대해 정리해보려 한다.
@GetMapping("/test")
public String test(Model model) {
model.addAttribute("data", data);
return "/test/data";
}
Model 객체의 key값과 Value를 통해 데이터를 넣고 return에 값을 받을 view 파일을 지정하면 view 파일로 데이터가 넘어간다.
<!DOCTYPE html>
<html>
<head>
<title>Document</title>
</head>
<body>
<p>${data.name}</p>
<p>${data.age}</p>
</body>
</html>
해당 view 파일에서 조회하는 방법은 key값, 즉 data를 이용하면 된다.
이 타입은 이번에 공부하면서 처음 알게된 타입이다.
타입 이름에서도 알 수 있듯 Model과 View를 모두 리턴한다.
컨트롤러에선 ModelAndView라는 하나의 객체를 반환하지만 실제론 Model,View 둘을 반환한다.
@GetMapping("/test")
public ModelAndView test() {
ModelAndView mav = new ModelAndView("test/viewPage");
modelAndView.addObject("data", "Baeldung");
return mav;
}
다시 돌아가는거다. 보통 어떤 폼을 작성하고 작성하기 이전 페이지로 돌아갈때 많이 쓴다.
@GetMapping("/test")
public ModelAndView test() {
ModelAndView mav = new ModelAndView();
mav.setViewName("redirect:/api/test");
return mav;
}
@Controller
public class HelloController {
@RequestMapping("/hello")
public void hello() {
}
}
상당히 독특한 타입이다.
메소드 이름을 정해주지 않아도 RequestToViewNameResolve를 통해 이름이 정해지는데
이름은 보통 매핑되는 url 주소와 동일하다.
어떤 값을 리턴하기보단 HTTP 응답 방식으로 본문에 바로 전달된다.
음..alert가 리턴값이 되며 동작하는 순간 view에 alert가 나온다고 생각하면 좋다.
@Controller
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "<html><body><h1>Hello, ResponseBody!</h1></body></html>";
}
}