반응형

스프링 mvc 구조에서 Ajax 통신으로 json을 return 하는 방법입니다. 

스프링에서 json으로 return 받는 방식은 여러가지 방법이 있으며,

이글에서는 jackson 을 사용하고, @ResponseBody 어노테이션을 사용하는 방식입니다.


첫번째 메이븐을 통해 jackson 을 다운 받습니다. 

pom.xml에 아래와 같이 추가합니다.


1
2
3
4
5
6
7
8
9
10
11
<!-- jackson -->
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.8.5</version>
        </dependency>


(글을 쓰는 당시 위의 버전이 최신이었음.)


두번째로 Ajax 통신을 위한 Controller를 작성합니다. 

아래의 예제는 '/admin/push/version' 의 url에 'pushTarget' 값을 전송하여 'VersionVO' 라는 vo 리스트를 담아 전송하는 소스입니다.

간단하게 설명하면, 원하는 결과를 조회하여 json으로 return 하는 부분입니다.

다음에 나오는 Ajax 부분을 보면 좀더 이해하기 쉬을 것 입니다. 


1
2
3
4
5
6
7
8
9
10
11
12
@Controller
@RequestMapping("/admin/push")
public class PushController {
    @RequestMapping(value = "/version")
    public @ResponseBody List<VersionVO> version(@RequestParam(required=true) String pushTarget
                                                                 ,HttpServletResponse response) throws Exception {
         
        List<VersionVO> versionVO=versionService.versionList(pushTarget);
         
        return versionVO;
    }
}


여기서 중요한 것은 반환형의 앞에 @ResponseBody 라는 어노테이션을 사용한 것입니다.

@ResponseBody을 사용하여 return 결과를 json으로 만드는 것.


마지막으로 Ajax 통신을 하는 자바스크립트 부분입니다.

위에서 작성한 url 경로를 통해 ajax 통신을 하고 json으로 return을 받은 후 결과를 가지고 처리 합니다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<script type="text/javascript">
$("#pushTarget").change(function(){
    $.ajax({
        url : "/admin/push/version",
        type : "POST",
        cache : false,
        data : "pushTarget="+$("#pushTarget").val(),
        success : function(response){
            var html = "";
            for(var i=0; i<response.length; i++){
                html += "<option value='"+response[i].versionInfo+"' label='"+response[i].versionInfo+"'/>";
            }
            $("#pushVersion").html(html);
            $("#pushVersion").selectpicker("refresh");
        }
    });
});
</script>


위의 자바스크립트 부분만을 설명하자면 pushTarget을 선택하는 선택한 값을 전송해 

결과 값을 받아 pushVersion이라는 selector의 option 값을 바꿔주는 소스이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<tr>
    <th>대상 <span class="required">*</span></th>
    <td>
        <f:select path="pushTarget" id="pushTarget">
            <f:option value="And" label="Android"/>
            <f:option value="iOS" label="iOS"/>
        </f:select>
    </td>
</tr>
<tr>
    <th>버전 <span class="required">*</span></th>
    <td>
        <f:select path="pushVersion" id="pushVersion">
            <c:forEach items="${versionVO}" var="resultList" varStatus="status">
                <f:option value="${resultList.versionInfo }" label="${resultList.versionInfo }"/>
            </c:forEach>
        </f:select>
    </td>
</tr>


소스의 일부분만 가져온 것이므로, 

json으로 return 받기위한 방법만을 참조하면된다.

반응형

+ Recent posts