2012-06-25 79 views
0

我一直在谷歌周围的互联网寻找一个(正确)的方式来@Consume在我的服务器上的Web资源中的“应用程序/ json”文件。发布json到java服务器

我使用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字符串,客户端必须发送到服务器。

这里是不是在服务器端代码:

@POST 
@Path("configLiveBand") 
@Consumes("application/json") 
@Produces("application/json") 
public String liveBandInsert(String jsonIn, @Context HttpServletRequest request) throws ParseException{ 

现在我问你我有什么为了让服务器读取输入JSON字符串与JavaScript来做到。 显然,我上面描述的方式不起作用。服务器返回

HTTP Status 405 - 

type Status report 

message 

descriptionThe specified HTTP method is not allowed for the requested resource(). 

看我的问题在互联网上,我发现涉及“的BufferedReader”类“的ReadLine()”方法解决方案。我不喜欢这个解决方案。我更喜欢,如果它是一种方式,注入json文件而不是逐行读取输入字符串。

任何帮助广为接受 感谢

+0

当然,告诉我,如果我必须明确的其他有关的问题,我有我还没有写的问题。 –

+0

如果您删除了@ @ Produces和@ Consumes注解,那么是否会调用'liveBandInsert()'?您的浏览器发送的请求实际上是什么样的(请检查您的浏览器的开发者工具)?如果您使用类似'curl'的方式向具有相同样本数据的网址发布邮件,它会起作用吗?如果删除'@ Consumes'和'@ Produces'并更改为'@ GET',您可以在浏览器中访问URL吗?请在问题中回答,评论可能太小:) –

+0

如果我删除了@ @ Produces和@ Consumes注释,则服务器返回与前面相同的描述。你知道吗?问题是'@ Post'注释。它适用于get,但不适用于'@ POST'。所以,这是一个JavaScript问题。我不正确的发送请求到服务器。让我发布整个电话... –

回答

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)); 

这将捕获的语法错误要早得多,可减轻您手动引用所有不同的点点滴滴,最有可能更快,它确实使整个事情更加强大。

+0

太干净了,谢谢谢谢谢谢:-) –

0

的问题是JSON作为菲利普写道:

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结果返回给客户端。 ;-)谢谢菲利普

相关问题