Spring, @Controller @RestController 차이
@Controller @RestController 차이
- 주요한 차이점 : HTTP Response Body가 생성되는 방식
@Controller
- 전통적인 Spring MVC의 컨트롤러
- View 기술사용
- @ResponseBody를 사용하면 View를 리턴하지 않고 Controller에서 직접 데이터 리턴 가능
Spring4.0부터 @RestController를 통해 더 단순화 되었다.
@RestController
- Restful 웹서비스의 컨트롤러
- 반환 되는 객체 데이터 타입 : JSON/XML 타입의 HTTP 응답을 직접 리턴
실행 흐름
@Controller의 실행 흐름
Client -> Request -> Dispatcher Servlet -> Handler Mapping -> Controller -> View -> Dispatcher Servlet -> Response -> Client
@ResponseBody의 실행 흐름
Client -> Request -> Dispatcher Servlet -> Handler Mapping -> Controller (ResponseBody) -> Response -> Client
@RestController의 실행 흐름
Client -> HTTP Request -> Dispatcher Servlet -> Handler Mapping -> RestController (자동 ResponseBody 추가) -> HTTP Response -> Client
1. @Controller(Spring MVC Controller)
[Controller - View]
Spring MVC Restful 전통적인 Work Flow
- 전통적인 Spring MVC Controller인 @Controller는 주로 View를 반환하기 위해 사용한다.
- Client는 URI형식으로 웹 서비스에 요청 전송
- Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트
- Controller가 요청을 처리한 후 응답을 DispatcherServlet으로 반환하고 DispatcherServlet은 View를 사용자에게 반환.
[Contoller - Data]
Spring 3.x MVC Restful Web Service Work Flow
- @ResponseBody로 Spring MVC의 컨트롤러에서는 데이터를 반환하기 위해 사용
- Client는 URI형식으로 웹 서비스에 요청 전송
- Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트
- @ResponseBody를 사용하여 Client에게 Json형태로 데이터를 반환.
2. @RestController(Spring Restful Controller)
Spring 4.x MVC Restful Web Service Work Flow
- RestController = Spring MVC Controller + @ResponseBody
- 주용도 : Json/XML형태로 객체 데이터 반환
- Client는 URI형식으로 웹 서비스에 요청 전송
- Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트
- RestController는 해당 요청을 처리하고 데이터를 반환.
–