1. @Controller

- 클라이언트의 요청으로부터 View를 반환하기 위해 사용한다.

Spring MVC Container가 View를 반환하는 과정

- 과정

① 클라이언트는 URI 형식으로 웹 서비스에 요청을 보낸다.

② Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.

③ Controller가 요청을 처리한 후에 응답을 DispatcherServlet으로 반환하고, DispatcherServlet은 View를 클라이언트에게 반환한다.

 

1.1 View가 아닌 data를 반환하는 경우

- @ResponseBody 애노테이션을 이용해야 한다. 이 애노테이션을 통해 Controller도 JSON 형태로 데이터를 반환할 수 있다.

Spring MVC Container가 data를 반환하는 과정

- 과정

① 클라이언트는 URI 형식으로 웹 서비스에 요청을 보낸다.

② Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.

③ @ResponseBody를 이용하여 클라이언트에게 JSON 형태로 데이터를 반환한다.

 

2. @RestController

- Spring MVC Controller에 @ResponseBody를 추가하여 JSON 형태로 객체 데이터를 반환한다.

Spring MVC Container가 RestController를 이용하여 data를 반환하는 과정

- 과정

① 클라이언트는 URI 형식으로 웹 서비스에 요청을 보낸다.

② Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.

③ RestController는 해당 요청을 처리하고 데이터를 반환한다.

- @RestController가 data를 반환할 때에는 viewResolver 대신에 HttpMessageConverter가 동작한다. HttpMessageConverter에는 여러 Converter가 등록되어 있고, 반환해야 하는 데이터에 따라 사용되는 Converter가 달라진다. 단순 문자열인 경우에는 StringHttpMessageConverter가 사용되고, 객체인 경우에는 MappingJackson2HttpMessageConverter가 사용되는 등 데이터 종류에 따라 서로 다른 MessageConverter가 작동하는 것이다. Spring은 클라이언트의 HTTP Accept 헤더와 서버의 컨트롤러 반환 타입 정보 둘을 조합하여 적합한 HttpMessageConverter를 선택하여 이를 처리한다.

 

참고

- https://mangkyu.tistory.com/49

'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