소스부터..
var data = {usr_id : "jack" , usr_pw : "jack", usr_name : "jack"};
$.ajax({
url : "/contextPath/test/json",
method : "POST",
contentType : "application/json",
data : JSON.stringify(data),
success : function() {
alert("전송 성공");
},
error : function(XHR, textStatus, errorThrown) {
alert("Error: " + textStatus);
alert("Error: " + errorThrown);
}
});
위와 같이 json 객체를 JSON.stringify 를 이용하여 문자열로 변환후 전송하려 할때
spring에서를 어떻게 받아야 할까?
@RequestMapping(value = "/test/json", method = RequestMethod.POST, consumes="application/json")
public void ajax_sendJSON(@RequestBody Map< String, Object> data, HttpServletResponse response) {
logger.info("ajax_sendJSON\n"+data);
response.setStatus(HttpServletResponse.SC_NO_CONTENT);
//응답 없음
}
위와 같이 받으면 된다. 만약에 json객체가 [] 로 된 배열형태라면
List< Map< String,Object>> 로 받으면 된다.
json객체를 내보낼때도 마찬가지다.
@ResponseBody
@RequestMapping(value = "/test/json", method = RequestMethod.GET, produces="application/json")
public List< Map< String, Object>> ajax_receiveJSON() {
logger.info("ajax_receiveJSON");
List< Map< String, Object>> list = new ArrayList< Map< String, Object>>();
for(int i=0 ; i<3 ; i++) {
Map< String, Object> map = new HashMap< String, Object>();
map.put("id", "id"+i);
map.put("name", "name"+i);
list.add(map);
}
return list;
}
위와 같이 리턴해주면 json형태로 손쉽게 받을 수 있다.
$.ajax({
url : "/contextPath/test/json",
method : "GET",
dataType:"JSON",
success : function(json) {
alert(JSON.stringify(json));
},
error : function(XHR, textStatus, errorThrown) {
alert("Error: " + textStatus);
alert("Error: " + errorThrown);
}
});
받는 것도 위 처럼 받으면 된다
매우 좋은 기능이지만 그냥 사용 할 수는 없다.
pom.xml 에서 다음을 추가하면 된다.
org.codehaus.jackson
jackson-core-asl
1.9.12
org.codehaus.jackson
jackson-mapper-asl
1.9.12
그리고 전에 글에 servlet-context.xml 에서 처럼 json 관련
bean을 추가해주면 된다.
댓글 없음:
댓글 쓰기