サーバー上のWebリソースで「application/json」ファイルを@Consumeする(正しく)方法を探して、インターネットを少しグーグルで検索しました。
私は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{
サーバーがJavaScriptからの入力json文字列を読み取れるようにするために、何をしなければならないかを尋ねています。明らかに、上で説明した方法は機能しません。サーバーが戻ります
HTTP Status 405 -
type Status report
message
descriptionThe specified HTTP method is not allowed for the requested resource ().
インターネットで私の問題を調べたところ、「BufferedReader」クラスの「readline()」メソッドを含む解決策が見つかりました。私はこの解決策が好きではありません。方法がある場合は、入力文字列を1行ずつ読み取る代わりにjsonファイルを挿入することをお勧めします。
どんな助けでも受け入れられます ありがとう