SPRING에서 PARAMETER로 JSON을 던져서 처리하는 것을 연습삼아 하게 되었다.
삽질의 연속이었다.-_-
JSP파일에서는 JQUERY 의 $.ajax를 사용하였다.
data 속성에 담아서 보냈는데 data에 담을 경우 알아서 queryString으로 파싱을 하게 된다.
(queryString : type=sfa&name=3234&id=1324142 형식)
그래서 JSON.stringify 함수를 통해서 JSON문자열로 만든 후 이를 data에 담아서 보냈다.
그리고 Spring에 JSON으로 보낸다는 것을 인식시키기 위해 contentType을 application/json;charset=UTF-8 로 보내야 한다.
그렇지 않을 경우 415 415 unsupported media type 에러를 받아볼 수 있을 것이다.(제길-_-)
소스
var jsonStr = JSON.stringify(pObj);
console.log(“jsonStr : ” + jsonStr);
$.ajax({
url : ‘/app/adm/menu/modify’
, method : “post”
, dataType : ‘json’
, data : jsonStr
, processData : true /*querySTring make false*/
, contentType : “application/json; charset=UTF-8”
, success : function(data, stat, xhr) {
alert(“success”);
}
, error : function(xhr, stat, err) {
alert(“error”);
console.log(err);
}
});
spring셋팅에서 @annoatation-drriven 을 사용하였기에 MessageConvert에 자동으로 JacksonJson 이 추가된다고 알고 있었다.
근데 이것도 pom.xml 에 jacksonJson mapper lib가 추가되었을 경우 해당한다.
(jackson json lib 버젼의 경우 1.9.x 도 되는듯 하나 그냥 최신버젼으로 하였다.)
(스프링 doc에 3.1.2 부터 가능하다고 하는 이야기도 있다. 안될 경우 spring버젼을 3.1.2 이상으로 하자.)
pom.xml
spring 의 controller 부분에서는 paremeter 로 json을 받기 위해 controller의 arg 부분에 @requestBody 를 추가하였다.
또한 return 을 json으로 하기 위해 @responseBody를 추가하였다.
controller의 argument, return 값이 대한 설명 참고 url
http://springsource.tistory.com/13
또한 json 으로 넘겨받은 것을 jackson json lib 가 자동으로 convert 시 리턴값을 List
(나같은 경우 json 기준 [{}, {}, {}] 구조임)
여기서도 domain 객체로 받는 것으로 처리해놨다가 엄청 삽질하고 구글링 통해 포기했다.-ㅅ-;;
controller 소스
@RequestMapping(“modify”)
@ResponseBody
public String modify(@RequestBody List
ArrayList