我一直在互联网上寻找一种(正确的)@Consume在我服务器上的网络资源中的“应用程序/ json”文件。
我正在使用glassfish应用服务器,所以它是一个java资源。
这里是调用javascvript代码:
var url="/MBC/pages/lives/";
var mygetrequest=new ajaxRequest();
mygetrequest.onreadystatechange=function(){
if (mygetrequest.readyState==4){
if (mygetrequest.status==200 || window.location.href.indexOf("http")==-1){
var render="";
var JsonIn =JSON.parse(mygetrequest.responseText);
if(JsonIn.error==undefined){
render="generic error";
}
}else
render=mygetrequest.responseText ;
document.getElementById(div).innerHTML=render;
}else{
render="An error has occured making the request";
}
};
var json2Send = "{" +
"boss:\""+location.href.substring(location.href.length-5,location.href.length-4)+"\"," ;
if(document.newLive.bval.value=='')
json2Send+="bands:[],";
else
json2Send+="bands:["+document.newLive.bval.value+"],";
json2Send+="data:\""+document.newLive.dateEvent.value+"\"," +
"address:{street:\""+document.newLive.street.value+"\"," +
"number:\""+document.newLive.number.value+"\"," +
"city:\""+document.newLive.city.value+"\"," +
"region:\""+document.newLive.region.value+"\"," +
"state:\""+document.newLive.state.value+"\"}" +
"}";
mygetrequest.open("POST", url, true);
mygetrequest.setRequestHeader("Content-type", "application/json");
mygetrequest.send(json2Send);
其中json2Send是客户端必须发送到服务器的json String。
这里是服务器端代码:
@POST
@Path("configLiveBand")
@Consumes("application/json")
@Produces("application/json")
public String liveBandInsert(String jsonIn, @Context HttpServletRequest request) throws ParseException{
我现在问你,为了让服务器读取来自javascript的输入json字符串,我该怎么办? 显然,我上面描述的方式不起作用。服务器返回
HTTP Status 405 -
type Status report
message
descriptionThe specified HTTP method is not allowed for the requested resource ().
通过互联网查看我的问题,我找到了涉及“BufferedReader”类的“readline()”方法的解决方案。我不喜欢这个解决方案。我更喜欢,如果是一种方式,注入json文件而不是逐行读取输入字符串。
任何帮助都被广泛接受 感谢
答案 0 :(得分:0)
json2Send+="\"data\":\""+document.newLive.dateEvent.value+"\"," +
"\"address\":{\"street\":\""+document.newLive.street.value+"\"," +
"\"number\":\""+document.newLive.number.value+"\"," +
"\"city\":\""+document.newLive.city.value+"\"," +
"\"region\":\""+document.newLive.region.value+"\"," +
"\"state\":\""+document.newLive.state.value+"\"}" +
"}";
而不是
json2Send+="data:\""+document.newLive.dateEvent.value+"\"," +
"address:{street:\""+document.newLive.street.value+"\"," +
"number:\""+document.newLive.number.value+"\"," +
"city:\""+document.newLive.city.value+"\"," +
"region:\""+document.newLive.region.value+"\"," +
"state:\""+document.newLive.state.value+"\"}" +
"}";
现在我可以阅读,发布并将json结果发送回客户端。 ;-)感谢Philipp
答案 1 :(得分:0)
很高兴我能提供帮助。
我仍然建议使用实际的Javascript对象表示法(JSON)而不是字符串连接来构建json2Send
,例如像这样:
// This creates an "empty" JS object, with no properties.
var json2Send = new Object();
var length = location.href.length;
// Adding a property is as easy as just setting it, it will be created by this.
json2Send.boss = location.href.substring(length - 5, length - 4);
if (document.newLive.bval.value == '') {
json2Send.bands = [];
} else {
json2Send.bands = [document.newLive.bval.value];
}
json2Send.data = document.newLive.dateEvent.value;
// Properties can also be other objects, here created with the
// object literal notation of { key:value, ...}.
json2Send.address = {
// Inside, it's just another JS object again,
// this time setting properties with literal notation key:value
// Note how there's no need to quote anything here!
street: document.newLive.street.value,
number: document.newLive.number.value,
city: document.newLive.city.value,
region: document.newLive.region.value,
state: document.newLive.state.value
};
然后将其转换为HTTP POST的字符串,如下所示:
mygetrequest.open("POST", url, true);
mygetrequest.setRequestHeader("Content-type", "application/json");
mygetrequest.send(JSON.stringify(json2Send));
这将更早地捕获语法错误,使您无需手动引用所有不同的部分,最有可能更快,并确保整个事情更加健壮。