BackEnd/Spring

Spring Controller 메소드 리턴타입 정리

SambaLim 2019. 3. 8. 00:16
Spring Controller 메소드 리턴타입 정리

스프링의 @Controller에서 @RequestMapping 어노테이션을 사용할 경우, 대표적으로 ModelAndView, String 등 여러가지 타입으로 정의할 수 있다.

 

0. 설정

1. application.properties

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

view를 /WEB-INF/jsp/ 내의 .jsp파일로 지정하였다.

2. Host, Port

http://localhost:8080

 

1. ModelAndView

@Controller
public class HelloController {
   
    @RequestMapping("/hello")
    public ModelAndView hello() {
        ModelAndView view = new ModelAndView();
        // View는 hello.jsp
        view.setViewName("hello");
        // [hello.jsp] ${name} = Lim
        view.addObject("name", "Lim");
        return view;
    }
    
}

http://localhost:8080/hello 를 REQUEST한 경우, hello.jsp가 View가 된다.

 

2. String

@Controller
public class HelloController {

    @RequestMapping("/hello")
    public String hello() {
        // View는 hello.jsp
        return "hello";
    }
    
}

String의 경우 리턴 값이 View의 이름으로 사용된다.

http://localhost:8080/hello 를 REQUEST한 경우, hello.jsp가 View가 된다.

 

3. void

@Controller
public class HelloController {

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

RequestToViewNameResolver를 통해 자동생성되는 View 이름이 사용된다.

URL과 View 이름을 통일하여 사용해야한다.

 

4. Object

RequestToViewNameResolver를 통해 자동생성되는 View 이름이 사용된다.

 

5. @ResponseBody

@Controller
public class HelloController {

    @RequestMapping("/hello")
    @ResponseBody
    public String hello() {
        return "<html><body><h1>Hello, ResponseBody!</h1></body></html>";
    }
    
}

@ResponseBody가 메소드레벨에 부여되는 경우, 메소드가 리턴하는 오브젝트는 View를 통해 결과를 만들어 내는 모델로 사용되는 대신, 메시지 컨버터를 통해 바로 HTTP 응답의 메시지 본문으로 전환된다.

return 값이 단일 모델 오브젝트이고 메시지 컨버터가 View와 같은 방식으로 동작한다.

'BackEnd > Spring' 카테고리의 다른 글

토비의 스프링 STS 환경설정  (0) 2019.08.07
Spring jstl 추가하기  (1) 2019.03.09
VS code에서 Spring 시작하기  (0) 2019.03.02
제어의 역전 (IoC)  (0) 2019.01.28
STS 설치하기  (0) 2019.01.27