0

post メソッドを使用して、json 文字列を安らかなサービスに送信したいと考えています。送信中ですが、サーバー側で受信したデータの形式が異なります。私は何を逃したのですか?

これはJavaでの私の安らかなサービスです

@Path("/CommonDemo")
public class CommonDemo 
{   
@POST
@Consumes(MediaType.APPLICATION_JSON)
public String result(String user)throws ServletException, IOException 
{
    System.out.println(user);
     return user;
}

}

次のようにjqueryを使用して上記のサービスを呼び出しています。

   var url = "http://localhost:8080/Snefocare/CommonDemo";
   var user="{'serviceInfo': [{'name':'All'}]}"; 

 $.ajax({
     type: 'POST',
      url: url,
     contentType: "application/json; charset=utf-8",
     data:{'user':user},
      success: function(data, textStatus, jqXHR) {
         alert('date'+data);

     },
     error: function(jqXHR, textStatus, errorThrown) {
         alert('error: ' + textStatus +' ERROR:'+ errorThrown);
     }
 });

この一言でお送りします

var user="{'serviceInfo': [{'name':'All'}]}"; 

そして安らかなサービスでは、私はそれを次のように見ています

user=%7B'serviceInfo'%3A+%5B%7B'name'%3A'All'%7D%5D%7D

% などの数字が追加された理由はわかりません。

4

3 に答える 3

1

% などの数字が追加された理由はわかりません。

% と数字は URL エンコーディングです。特定の文字 (実際にはバイト) は、バイトを表す 16 進数のペアである%xx場所に置き換えられています。xx

問題は、クライアント側が JSON 文字列である属性を持つ Javascript オブジェクトを渡していることです。@ishwar で説明されているように、文字列化する必要があります。

jquery.ajax のドキュメントには次のように書かれています。

サーバーに送信されるデータ。まだ文字列でない場合は、クエリ文字列に変換されます。...

何が起こっているかというと、オブジェクトが URL クエリ文字列に変換されているということです... URL エンコーディングが完了しています。

于 2013-09-11T06:40:41.973 に答える
0

data:JSON.stringify(user) を試してみてください。動作します。

于 2013-09-11T06:41:00.207 に答える
0

まず、user変数は正当な JSON ではありません。間違った文字列ターミネータを使用しています (JSON では、キーと文字列を単一引用符ではなく二重引用符で囲む必要があります)。

第二に、 jQueryにそうしないように指示していないため、置換を使用して自動的にx-www-form-urlencodedエンコーディングに変換されています。%xx

AJAX POST リクエストの本文に「プレーンな JS オブジェクト」を投稿するには、次のことを試してください。

var user= {'serviceInfo': [{'name': 'All'}]};  // JS object literal

$.ajax({
    type: POST,
    url: url,
    contentType: "application/json; charset=utf-8"
    data: JSON.stringify(user), // defer encoding to JSON until here
    processData: false,         // and do not URL encode the data
    ...
});
于 2013-09-11T06:58:47.797 に答える