[Spring] 2-2-1. Spring MVC - Controller의 반환 값
0. Controller의 반환 값
:: Spring에 위임되어 Controller에서 처리한 모든 응답은 Front Controller에게 반환 타입을 고려해 반환
:: Front Controller(DispatcherServlet) 은 앞선 Controller 가 반환한 타입에 따라 View 생성
1. 반환 값 분류 기준
:: HandlerAdapter의 응답으로 String 또는 ModelAndView 또는 Object 중 하나를 받음
:: @ResponseBody의 여부에 따라 X :: ViewResolver 혹은 O :: MessageConverter 실행
1.1 웹 페이지를 반환(HTML)
controller의 반환 타입 | String | ModelAndView |
정적 페이지(ViewTemplate) | 동적 페이지(ViewTemplate + Model) | |
ViewResolver의 탐색 값 | ViewTemplate 명칭의 HTML, JSP, Thymeleaf | |
ViewResolver의 반환 값 | 미존재 시 404 | + Model => 렌더링 |
1.2 데이터를 반환(JSON)
=> @Controller + @ReponseBoby = @RestController
// @Controller + @ReponseBoby = @RestController
@RestController
public class IndexController {
@RequestMapping(method = RequestMethod.GET, value = "/")
public String index() {
return "index.html";
}
}
controller의 반환 타입 | Object |
@ResponseBody 적용 | -> Controller 메서드가 반환 객체를 JSON으로 변환 -> @Controller 메서드에서의 반환 값을 ViewTemplate가 아닌 "값 그 자체"로 인식 |
HttpMessageConverter | -> 객체에 따라 JSON 또는 XML로 데이터 변환 |
1.2.1 JSON 반환을 위한 HttpMessageConverter 구현체
:: HttpMessageConverter는 XmlHttpRequest(XHR)의 응답
- XmlHttpRequest(XHR)
:: 웹 브라우저가 웹 서버와 비동기적으로 통신하기 위해 제공하는 API
:: 웹 페이지 전체를 새로고침하지 않고도 서버로부터 데이터를 주고받거나, 특정 부분만 업데이트 가능
:: HTTP 메서드 지원 -> 서버와의 통신 지원
=> 위의 웹 서버와의 통신을 위한 API인 XHR을 통해 JSON<->Object 변환
- 응답
:: 직렬화(Serialization)
:: Java 객체 → JSON 변환(Java 객체 → HTTP Response Body) - 요청
:: 역직렬화(Deserialization)
:: JSON → Java 객체 변환 (HTTP Request Body → Java 객체)
참조
ASAC 수업자료
인프런 - 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 강의 | 김영한 - 인프런
김영한 | , 원리를 알아야 핵심이 보인다!김영한의 스프링 MVC 기본편 👨💻 📌 수강 전 확인해주세요! 본 강의는 자바 스프링 완전 정복 시리즈의 네 번째 강의입니다. 우아한형제들 최연소
www.inflearn.com