본문으로 바로가기
반응형

Web개발을 할 때 ajax를 사용해서 통신하는 경우가 매우 많다.

클라이언트에서 Spring Controller로 ajax 등의 요청을 했을 때, json형식으로 return 받기 위해서는 여러 방법이 있을 수 있다. 그 중 두 가지 방법이 주로 쓰인다.


1. Controller return type을 String으로 하고, 별도의 Json API를 사용해 parsing해서 json 형식으로 return 해준다.


2. MappingJackson2JsonView를 사용해서 ModelAndView를 json 형식으로 반환해 준다.



1번은 Gson 등 Json API들을 사용해서 적당히 Parsing하면 될 것이고, 지금 알아볼 것은 2번 방법이다.


별도의 처리 없이 컨트롤러에서 ModelAndView를 넘기면 당연히 안된다.

Spring Bean 설정 없이 구글링으로 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


방법은 간단하다.


1) MappingJackson2JsonView 형식의 jsonView를 Spring Bean으로 등록한다.


- 일반적인 Spring 이라면 DispatcherServlet에 설정

1
2
3
4
<bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
    <property name="contentType" value="application/json;charset=UTF-8"> </property>
</bean>
 
cs


- Spring boot를 사용하고 따로 DispatcherServlet xml을 사용해서 설정하지 않는다면, @Configuration 을 붙인 WebConfig 파일에서 Bean으로 등록

1
2
3
4
    @Bean
    MappingJackson2JsonView jsonView(){
        return new MappingJackson2JsonView();
    }
cs


2) Controller에서 return할 ModelAndView를 생성 할 때 View를 "jsonView"로 설정

(예시)

1
2
3
4
5
6
7
8
9
10
11
12
    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;
cs


3) 클라이언트에서 Response가 json 형식으로 잘 오는것을 확인



반응형

 Other Contents