[Spring] Spring MVC Controller return타입

Tomas.Lee·2022년 1월 23일
0

web study

목록 보기
12/14

MVC 모델을 사용하다보면 Controller 페이지를 자주 들락날락 할 것이다.

나 또한 이번 프로젝트를 하면서 Controller에 자주 들락날락거리며 여러번 코드를 짜고, 수정하고,지웠다.

보면서 여러 return 타입이 있다는걸 알고 이에 대해 정리해보려 한다.

1. String

@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를 이용하면 된다.

2.ModelAndView

이 타입은 이번에 공부하면서 처음 알게된 타입이다.

타입 이름에서도 알 수 있듯 Model과 View를 모두 리턴한다.

컨트롤러에선 ModelAndView라는 하나의 객체를 반환하지만 실제론 Model,View 둘을 반환한다.

@GetMapping("/test")
public ModelAndView test() {
    ModelAndView mav = new ModelAndView("test/viewPage");
    modelAndView.addObject("data", "Baeldung");
    return mav;
}

3.redirect

다시 돌아가는거다. 보통 어떤 폼을 작성하고 작성하기 이전 페이지로 돌아갈때 많이 쓴다.

@GetMapping("/test")
public ModelAndView test() {
    ModelAndView mav = new ModelAndView();
    mav.setViewName("redirect:/api/test");

    return mav;
}

4.void

@Controller 
public class HelloController { 

@RequestMapping("/hello") 
public void hello() {
	} 
}

상당히 독특한 타입이다.

메소드 이름을 정해주지 않아도 RequestToViewNameResolve를 통해 이름이 정해지는데

이름은 보통 매핑되는 url 주소와 동일하다.

5.@ResponseBody

어떤 값을 리턴하기보단 HTTP 응답 방식으로 본문에 바로 전달된다.

음..alert가 리턴값이 되며 동작하는 순간 view에 alert가 나온다고 생각하면 좋다.

@Controller 
public class HelloController { 
	@RequestMapping("/hello")
    @ResponseBody 
    public String hello() { 
    	return "<html><body><h1>Hello, ResponseBody!</h1></body></html>";
        } 
    }
profile
System.println.out("Hello World");

0개의 댓글