1. @Controller
- 클라이언트의 요청으로부터 View를 반환하기 위해 사용한다.
- 과정
① 클라이언트는 URI 형식으로 웹 서비스에 요청을 보낸다.
② Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.
③ Controller가 요청을 처리한 후에 응답을 DispatcherServlet으로 반환하고, DispatcherServlet은 View를 클라이언트에게 반환한다.
1.1 View가 아닌 data를 반환하는 경우
- @ResponseBody 애노테이션을 이용해야 한다. 이 애노테이션을 통해 Controller도 JSON 형태로 데이터를 반환할 수 있다.
- 과정
① 클라이언트는 URI 형식으로 웹 서비스에 요청을 보낸다.
② Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.
③ @ResponseBody를 이용하여 클라이언트에게 JSON 형태로 데이터를 반환한다.
2. @RestController
- Spring MVC Controller에 @ResponseBody를 추가하여 JSON 형태로 객체 데이터를 반환한다.
- 과정
① 클라이언트는 URI 형식으로 웹 서비스에 요청을 보낸다.
② Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.
③ RestController는 해당 요청을 처리하고 데이터를 반환한다.
- @RestController가 data를 반환할 때에는 viewResolver 대신에 HttpMessageConverter가 동작한다. HttpMessageConverter에는 여러 Converter가 등록되어 있고, 반환해야 하는 데이터에 따라 사용되는 Converter가 달라진다. 단순 문자열인 경우에는 StringHttpMessageConverter가 사용되고, 객체인 경우에는 MappingJackson2HttpMessageConverter가 사용되는 등 데이터 종류에 따라 서로 다른 MessageConverter가 작동하는 것이다. Spring은 클라이언트의 HTTP Accept 헤더와 서버의 컨트롤러 반환 타입 정보 둘을 조합하여 적합한 HttpMessageConverter를 선택하여 이를 처리한다.
참고
'Spring' 카테고리의 다른 글
Controller에서 HTTP request parameter 조회하는 방법 (0) | 2021.11.15 |
---|---|
Controller method parameter types (0) | 2021.11.12 |
@RequestMapping (0) | 2021.11.12 |
Logging (0) | 2021.11.11 |
DispatcherServlet (0) | 2021.11.08 |