@Controller
-
@Controller 동작 원리
- Client는 URI 형식으로 웹 서비스에 요청을 한다.
- DispatcherServlet이 요청을 위임할 HandlerMapping을 찾는다.
- HandlerMapping을 통해 요청을 위임할 Controller를 찾는다.
- HandlerAdapter를 통해 위임된 Controller에게 요청을 전달한다.
- Controller는 요청을 처리한 후에 ViewName을 반환한다.
- DispatcherServlet은 ViewResolver를 통해 ViewName에 해당하는 View를 찾아 사용자에게 반환한다.
-
전통적인 Spring MVC 패턴에서의 컨트롤러, View를 반환하기 위해 사용
-
파일(.html)을 반환
- return값을 파일명으로 인식하여 반환
return “index”;
→ index.html
- 모바일 환경에서는 파일(html)을 받을 수 없다. →
@RestController
사용해야 된다.
-
@ResponseBody
를 추가적으로 사용하면 파일이 아닌 데이터(xml, json) 반환 가능
@RestController
ResponseEntity
- 컨트롤러를 통해 객체를 반환할 때 감싸서 반환하는 객체
- ViewResolver 대신 HttpMessageConverter가 동작
- 반환하는 데이터에 따라 사용하는 Converter가 다름
- 문자열 → StringHttpMessageConverter
- 객체 → MappingJackson2HttpMessageConverter
- Controller가 요청을 처리한 후 HandlerAdapter에게 객체를 전달하는 시점에 변환
HttpMessageConverter
- RequestMappingHandlerAdapter에는 요청 또는 응답의 데이터 형식에 따른 여러 개의 메시지 변환기 HttpMessageConverter가 등록되어 있다.
@RequestBody
, @ResponseBody
두 개의 어노테이션은 HttpMessageConverter에 의해 수행되는 것!
- 데이터가 아닌 파일을 반환하는 MessageConverter가 아닌 ViewResolver가 동작함
💡 데이터를 반환하는 RestController와 View를 반환하는 Controller는 서로 다른 파일로 분리하여 작성하는 것이 좋다.