Json형태의 Request를 받아 처리 하고 싶습니다.
- 작성자 :
- 정*창
- 작성일 :
- 2015-02-26 09:20:54
- 조회수 :
- 5,008
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
ajax로 아래와 같이 호출하고
var formData = {"list":[{"id":"1", "name":aa},{"id":"2", "name":bb}]};
$.ajax({
url: '/in.json',
type: 'POST',
data: formData,
contentType: "application/json",
success: function(result) {
var str = JSON.stringify(result, null, '\t');
$('#jsonView').text("JSON Data: " + str);
},
error: function(status) {
alert(status);
}
});
Controller 에서 했더니 Exception에 걸리더군요.
@RequestMapping(value = "/in", method = RequestMethod.POST)
public String in(@RequestBody String body, ModelMap model) throws Exception {
try{
JSONObject Json = JSONObject.fromObject(body);
JSONArray ja = Json.getJSONArray("beaconList");
String result = "";
for (int i = 0; i < ja.size(); i++){
JSONObject order = ja.getJSONObject(i);
result += "id: " + order.getString("id") + ", name: " + order.getString("name") + "\n";
}
}catch(JSONException e){LOGGER.debug(e.toString());}
return "";
}
Exception은 로그는 net.sf.json.JSONException: A JSONObject text must begin with '{' at character 1 of list%5B0%5D%5Bid%5D%3D1%26list%5B0%5D%5Bname%5D%3Daa%26list%5B1%5D%5Bid%5D%3D2%26list%5B1%5D%5Bname%5D%3Dbb
와 같습니다. @RequestBody로 받았더니 Json String 형태가 아니여서
*web.xml에 *.json를 encodingFilter에 넣었습니다.
그래서 Controller 에서 이렇게 했더니
@RequestMapping(value = "/in", method = RequestMethod.POST, consumes="application/json")
public String in(@RequestBody ListVO listVO, ModelMap model) throws Exception {
LOGGER.debug(beaconPKListVO.toString());
return "";
}
이번에는
Content type 'application/json;charset=UTF-8' not supported
이런 에러가 나면서 실행되지 않네요...
@RequestMapping(value = "/UM-009/beacon", method = RequestMethod.POST, consumes="application/json")
이부분
@RequestMapping(value = "/UM-009/beacon", method = RequestMethod.POST, , headers="Content-Type=application/json")
해봤지만 똑같이 에러가 나네요..
ListVO VO
=====================
....
private List<VO> list;
getter/setter.....
VO
======================
....
private String id;
private String name;
getter/setter.....
위와 같이 했습니다.
전 첫번째 방법이든 두번째 방법이든 되기만 하면 상관없습니다.
되는 방법으로 부탁드립니다.
var formData = {"list":[{"id":"1", "name":aa},{"id":"2", "name":bb}]};
$.ajax({
url: '/in.json',
type: 'POST',
data: formData,
contentType: "application/json",
success: function(result) {
var str = JSON.stringify(result, null, '\t');
$('#jsonView').text("JSON Data: " + str);
},
error: function(status) {
alert(status);
}
});
Controller 에서 했더니 Exception에 걸리더군요.
@RequestMapping(value = "/in", method = RequestMethod.POST)
public String in(@RequestBody String body, ModelMap model) throws Exception {
try{
JSONObject Json = JSONObject.fromObject(body);
JSONArray ja = Json.getJSONArray("beaconList");
String result = "";
for (int i = 0; i < ja.size(); i++){
JSONObject order = ja.getJSONObject(i);
result += "id: " + order.getString("id") + ", name: " + order.getString("name") + "\n";
}
}catch(JSONException e){LOGGER.debug(e.toString());}
return "";
}
Exception은 로그는 net.sf.json.JSONException: A JSONObject text must begin with '{' at character 1 of list%5B0%5D%5Bid%5D%3D1%26list%5B0%5D%5Bname%5D%3Daa%26list%5B1%5D%5Bid%5D%3D2%26list%5B1%5D%5Bname%5D%3Dbb
와 같습니다. @RequestBody로 받았더니 Json String 형태가 아니여서
*web.xml에 *.json를 encodingFilter에 넣었습니다.
그래서 Controller 에서 이렇게 했더니
@RequestMapping(value = "/in", method = RequestMethod.POST, consumes="application/json")
public String in(@RequestBody ListVO listVO, ModelMap model) throws Exception {
LOGGER.debug(beaconPKListVO.toString());
return "";
}
이번에는
Content type 'application/json;charset=UTF-8' not supported
이런 에러가 나면서 실행되지 않네요...
@RequestMapping(value = "/UM-009/beacon", method = RequestMethod.POST, consumes="application/json")
이부분
@RequestMapping(value = "/UM-009/beacon", method = RequestMethod.POST, , headers="Content-Type=application/json")
해봤지만 똑같이 에러가 나네요..
ListVO VO
=====================
....
private List<VO> list;
getter/setter.....
VO
======================
....
private String id;
private String name;
getter/setter.....
위와 같이 했습니다.
전 첫번째 방법이든 두번째 방법이든 되기만 하면 상관없습니다.
되는 방법으로 부탁드립니다.
A
안녕하세요. 정영참님.
우선, 처음의 경우 ajax 호출 시 지정하신 json의 데이터 형태가 잘못되실 것 같습니다.
아마도 별도로 var formData의 지정하신 형식 상의 문제인 것 같습니다.
($.ajax 메소드의 data 파라미터의 경우 현재 형식으로 직접 지정하면 가능)
별도의 변수를 통해 json을 생성하시는 경우라면 json 데이터 형태의 string을 json으로 파싱하시는 형태로 처리하셔야 할 것 같습니다.
해당 부분은 아래 링크를 참조하시면 되실 것 같습니다.
http://huskdoll.tistory.com/49
추가적으로 request의 경우 json 데이터로 처리하시는 것보다는 일반 http의 request 방식으로 처리하시는 것이 간단하실 수 있습니다. reponse 데이터의 경우 브라우저가 아닌 여러 기계나 application에서 처리할 수 있도록 json 유형으로 response하시면 되지만,
request의 경우 이미 GET/POST와 같은 표준화된 방식이 있기 때문입니다.
그럼, 즐거운 하루되십시오.
감사합니다.
우선, 처음의 경우 ajax 호출 시 지정하신 json의 데이터 형태가 잘못되실 것 같습니다.
아마도 별도로 var formData의 지정하신 형식 상의 문제인 것 같습니다.
($.ajax 메소드의 data 파라미터의 경우 현재 형식으로 직접 지정하면 가능)
별도의 변수를 통해 json을 생성하시는 경우라면 json 데이터 형태의 string을 json으로 파싱하시는 형태로 처리하셔야 할 것 같습니다.
해당 부분은 아래 링크를 참조하시면 되실 것 같습니다.
http://huskdoll.tistory.com/49
추가적으로 request의 경우 json 데이터로 처리하시는 것보다는 일반 http의 request 방식으로 처리하시는 것이 간단하실 수 있습니다. reponse 데이터의 경우 브라우저가 아닌 여러 기계나 application에서 처리할 수 있도록 json 유형으로 response하시면 되지만,
request의 경우 이미 GET/POST와 같은 표준화된 방식이 있기 때문입니다.
그럼, 즐거운 하루되십시오.
감사합니다.