ModelAndView를 공부하기 이전에 스프링 MVC 전체 구조에 대해서 알고 있어야 된다.
스프링 MVC전체 구조
DispatcherServlet
- web.xml(배치서술자)에 정의 되어 있으며, servlet-context.xml 설정 파일을 읽어서 구동한다.
- FrontController 라고도 하며, 클라이언트의 "Request"를 받아서 제어한다.
- Controller에 요청을 전달하고 결과값을 View에 전달한다.
HandlerMapping
- 요청 URL에 매핑되는 Controller를 찾아서 DispatcherServlet 반환
HandlerAdapter
- HandlerMapping -> 받은 Controller에 맞는 메소드 탐색
Controller
- 클라이언트의 요청을 처리함(Requset,Response)
- 비지니스 로직 + 서비스 로직 처리
- View에 전달할 객체를 Model에 저장
View Name
- Controller 처리 후 View에 해당하는 View Name을 저장하여 반환
Model
- Controller에서 처리 후 View에 전달할 객체를 저장함
View Resolver
- Controller가 반환한 View Name을 기반으로 -> View를 찾아서 Dispatcher Servelt에 반환
View
- DispatcherServlet이 전달한 View를 호출하고 Model 객체에서 필요한 객체를 가져와서 클라이언트에 응답
ModelAndView란?
- 스프링 MVC에서 뷰에 전달할 값을 포함 + 어떤 뷰를 사용할지도 함께 지정 할 수있는 인터페이스다. 컨트롤러에서 ModelAndView 객체를 만들고 여기에 데이터와 뷰 이름을 설정한 다음 반환하면, 스프링 MVC가 이 정보를 사용해서 뷰를 렌더링한다.
@GetMapping("/goToViewPage")
public ModelAndView jihwanWtihModelAndView() {
ModelAndView modelAndView new ModelAndView("view/viewPage");
modelAndView.addObject("jihwan","jihwan");
return modelAndView;
}
이렇게 사용하면 된다. 그렇다면 Web 개발 할 때 ajax를 사용해서 통신하는 경우가 매우 많은데, json형식으로 return 받기 위해선 어떤식으로 사용하면 될까?
총 2가지 방법이 존재한다.
- Controller에서 return type -> String으로 하고, 별도의 Json API parsing 해서 Json 형식으로 return
- MappingJackson2JsonView를 사용해서 ModelAndView를 json 형식으로 반환
1번은 Gson이나 Json API 사용해서 Parsing 하면 되고, 필자가 궁금 했던 건 2번이다. 별도의 처리 없이 ModelAndView를 넘기면 될까?
ModelAndView mv = new ModelAndView("jsonView");
// 이렇게 사용한다면 아래와 같은 에러가 발생한다.
Error resolving template "jsonView", template might not exist or might not be accessible by any of the configured Template Resolvers
DispatcherServlet에 빈 등록을 하면 된다.
스프링
<bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
<property name="contentType" value="application/json;charset=UTF-8"> </property>
</bean>
스프링부트 : @Configuration을 붙인 WebConfig 파일에서 Bean등
@Bean
MappingJackson2JsonView jsonView(){
return new MappingJackson2JsonView();
}
2) Controller에서 return할 ModelAndView를 생성 할 때 View를 "jsonView"로 설정
ModelAndView mv = new ModelAndView("jsonView");
userVO.setOrderBy(orderDir);
userVO.setOrderId(orderColNm);
List<UserVO> userList = userMgmtSvc.selectUserList(userVO);
int totalCnt = userMgmtSvc.selectUserListCount(userVO);
mv.addObject("recordsTotal", totalCnt);
mv.addObject("recordsFiltered", totalCnt);
mv.addObject("data", userList);
return mv;
3) 클라이언트에서 Response가 json 형식으로 잘 오는것을 확인
출처 |
https://www.leafcats.com/234
https://catsbi.oopy.io/f52511f3-1455-4a01-b8b7-f10875895d5b
https://rebugs.tistory.com/602
'Study > Spring' 카테고리의 다른 글
Spring MVC 구조의 처리 과정 정리 (0) | 2025.08.26 |
---|---|
SOAP 통신의 모든 것 (2) | 2025.07.09 |
[Spring] RestTemplate 정리 (1) | 2024.09.03 |
redirect와 forward에 대해서(ViewResolver를 곁들인..) (0) | 2024.08.04 |