Dev

[Spring Boot] @Controller @RestController 차이

Ryan Woo 2019. 12. 16. 19:19

Spring MVC Framework and REST

Spring의 어노테이션 기반 MVC 프레임 워크는 RESTful 웹 서비스 생성 프로세스를 단순화한다. 전통적인 Spring MVC 컨트롤러와 RESTful 웹 서비스 컨트롤러의 주요 차이점은 http 응답 본문이 생성되는 방식이다. 기존 MVC 컨트롤러는 View 기술에 의존하지만 RESTful 웹 서비스 컨트롤러는 단순히 객체를 반환하고 객체 데이터는 json/xml로 http 응답에 직접 작성된다.

출처 https://www.genuitec.com/spring-frameworkrestcontroller-vs-controller/

 

Spring Framework: @RestController vs @Controller - Genuitec

In the Spring framework, a key difference between a traditional MVC and the RESTful web service controller is the way the HTTP response body is created.

www.genuitec.com

@RestController

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
    @AliasFor(
        annotation = Controller.class
    )
    String value() default "";
}

@RestController를 열어보면 @Controller와 @ResponseBody를 포함한다.

Spring 4.0은 @Controller와 @ResponseBody 어노테이션을 추가하는 것 대신에 @RestController를 도입했다. @RestController를 사용하면 컨트롤러 클래스에 더 이상 모든 요청 맵핑 메소드에 @ResponseBody를 추가 할 필요가 없다. @ResponseBody 어노테이션은 기본적으로 활성화되어 있다.

@Controller

클라이언트 요청이 들어오면 ViewResolver를 통해 클라이언트에게 text/html 타입의 응답을 보낸다.

@ResponseBody

응답으로 view말고 data를 반환해야 하는 경우라면 @ResponseBody를 사용하면 된다. 해당 어노테이션은 data를 json형식으로 반환할 수 있다. 클라이언트의 요청이 들어오면 MessageConverter를 통해 application/json이나 text/plain 등 알맞은 형태로 리턴한다.