如何将JSON字符串或对象从dojo xhr post调用传递到Java中实现的post方法
我试图使用javascript(dojo xhr)将JSON字符串传递给使用ApacheWink库实现的POST方法 下面是我使用dojo/_base/xhr编写的javascript代码:如何将JSON字符串或对象从dojo xhr post调用传递到Java中实现的post方法,java,ajax,json,rest,dojo,Java,Ajax,Json,Rest,Dojo,我试图使用javascript(dojo xhr)将JSON字符串传递给使用ApacheWink库实现的POST方法 下面是我使用dojo/_base/xhr编写的javascript代码: var data = JSON.stringify({"id" : "1", "status" : "Red", "title" : "Incident 1"}); xhr.post ( { headers: { 'Content-Type': 'applica
var data = JSON.stringify({"id" : "1", "status" : "Red", "title" : "Incident 1"});
xhr.post
(
{
headers: {
'Content-Type': 'application/json'
},
handleAs : "json",
content : data,
load : function(data, ioArgs)
{
alert(data);
},
error : function(error, ioArgs)
{
alert(error);
}
}
);
下面是我用Java编写的POST方法代码:-
@POST
@Path("saveIncidents")
@Consumes(MediaType.APPLICATION_JSON)
public void saveIncidents(String incidentData)
{
try {
JSONObject jsonObject = new JSONObject(incidentData);
} catch (JSONException e) {
e.printStackTrace();
}
}
然而,我得到的例外是:
A JSONObject text must begin with '{' at character 1
下面是字符串变量“incidentData”中的内容:
0=%7B&1=%22&2=i&3=d&4=%22&5=%3A&6=%22&7=1&8=%22&9=%2C&10=%22&11=i&12=n&13=c&14=i&15=d&16=e&17=n&18=t&19=S&20=t&21=a&22=t&23=u&24=s&25=%22&26=%3A&27=%22&28=R&29=e&30=d&31=%22&32=%2C&33=%22&34=i&35=n&36=c&37=i&38=d&39=e&40=n&41=t&42=T&43=i&44=t&45=l&46=e&47=%22&48=%3A&49=%22&50=I&51=n&52=c&53=i&54=d&55=e&56=n&57=t&58=%20&59=1&60=%22&61=%7D
有人知道怎么做吗?提前感谢您的帮助。您确定如何使用stringify吗?下面是我从msdn得到的一个例子
var contact = new Object();
contact.firstname = "Jesper";
contact.surname = "Aaberg";
contact.phone = ["555-0100", "555-0120"];
var jsonText = JSON.stringify(contact);
document.write(jsonText);
现在我已经这样解决了-
@POST
@Path("saveIncidents")
@Consumes(MediaType.APPLICATION_JSON)
public void saveIncidents(String encodedIncidentData) {
JSONObject jsonObject = null;
String incidentData = "";
StringTokenizer mainTokenizer = new StringTokenizer(encodedIncidentData, "&");
while(mainTokenizer.hasMoreElements()) {
String token = mainTokenizer.nextElement().toString();
StringTokenizer innerTokenizer = new StringTokenizer(token, "=");
String character = null;
while(innerTokenizer.hasMoreElements()) {
character = innerTokenizer.nextElement().toString();
}
if(character.equals("%2C")){
character = ",";
}
else if(character.equals("%22")){
character = "\"";
}
else if(character.equals("%7B")){
character = "{";
}
else if(character.equals("%7D")){
character = "}";
}
else if(character.equals("%3A")){
character = ":";
}
else if(character.equals("%5D")){
character = "]";
}
else if(character.equals("%5B")){
character = "[";
}
else if(character.equals("%20")){
character = " ";
}
incidentData += character;
}
try {
jsonObject = new JSONObject(incidentData);
} catch (JSONException e) {
e.printStackTrace();
}
}
不过,请告诉我是否有任何有效的解决方案。谢谢。{id:“1”,“incidentStatus:“红色”,“incidentTitle:“Incident1”}是有效的JSON对象。根据这个,它说“stringify”将javascript对象转换为JSON字符串。为什么要将JSON字符串传递给stringify?它是JSON对象而不是JSON字符串。顺便说一句,我也尝试过-var obj=new Object();obj.id=“1”;obj.incidentStatus=“红色”;obj.incidentTitle=“事件1”;var data=JSON.stringify(obj);同样的问题。您确定必须传入内容密钥吗?有数据密钥吗?我认为您必须像--postData:dojo.toJson({key1:value1',key2:{key3:value2}})一样传递,看到这里的文档。它说在选项中你有数据标签。内容选项不存在。请查收。