RestController
전통적인 Spring MVC에서의 @Controller
는 주로 View
를 반환하기 위한 용도로 사용되었다. MVC 컨테이너는 Client의 요청으로부터 View를 반환한다.
Spring MVC의 @Controller
에서 데이터를 반환하기 위해서는 컨트롤러의 각 메소드에 @ResponseBody
어노테이션을 사용하면 JSON 형태로 데이터를 반환할 수 있다. 이 때 ViewResolver
를 통해 데이터를 담을 View를 찾는 과정을 거치게 된다.
Spring 4.0에서 Spring 프레임워크에서 RESTful
웹 서비스를 쉽게 개발할 수 있도록 @RestController
라는 것이 추가됨.
RestController
는 @Controller
와 @ResponseBody
의 조합으로 단순히 객체만을 반환하고 객체 데이터는 XML / JSON 형식으로 HTTP 응담에 담아서 전송된다.
- HttpMessageConverter
스프링 프레임워크에서 제공하는 인터페이스 中
HTTP 요청의 본문을 객체로 변경하건, 객체를 HTTP 응답 본문으로 변경할 때 사용된다.
뷰가 아니라 객체를 응답할 때는 viewResolver 대신에 HttpMessageConverter가 동작하는데, HttpMessageConverter에는 여러 Converter가 등록되어 있고 반환하는 데이터에 따라 사용되는 Converter가 달라진다는 특징이 있다.
리턴 타입이 application/json
인 경우에는 MappingJacson2HttpMessageConverter가 사용되고, 클라이언트의 Http Accept 헤더와 서버의 컨트롤러 return type 정보를 좋바해 적절한 HttpMessageConverter가 채택된다.
그냥 @Controller
를 사용할 때는 @ResponseBody
를 넣어줘야 MessageConverter가 적용되고, 선언하지 않으면 BeanNameViewResolver에 의해서 viewName에 해당하는 뷰를 찾으려고 할 것이다.
즉, 클라이언트의 요청이 들어오면 디스패처 서블릿에 의해서 선택된 컨트롤러가 api를 실행하고 이 때
@ResponseBody
어노테이션이 선언되어있으면 Obejct 값을 Body에 넘겨주기 위해서 HttpMessageConverter가 사용된다. 이 때는 반환값에 따라서 각기 다른 Converter가 사용됩니다.
'웹 프로그래밍 > [ Spring Boot ]' 카테고리의 다른 글
[ SpringBoot ] 07. RestTemplate을 알아보자 (0) | 2021.10.12 |
---|---|
[ SpringBoot ] 06. ResponseEntity에 관하여 (0) | 2021.10.12 |
[ SpringBoot ] 04. Lombok 라이브러리 (0) | 2021.10.12 |
[ SpringBoot ] 03. Spring의 Bean Scope를 알아보자 (0) | 2021.10.12 |
[ SpringBoot ] 02. Spring의 Autowiring과 Qualifer (0) | 2021.10.12 |