1

jsonオブジェクトをajax経由でJavaサーブレットに送信しています。jsonオブジェクトは、配列を指す3つのキーと、単一の文字列を指すキーを持つKey-Valueタイプです。私はそれを次のようにJavaScriptで構築します:

var jsonObject = {"arrayOne": arrayOne, "arrayTwo": arrayTwo, "arrayThree": arrThree, "string": stringVar};

次に、次のようにajaxを使用してJavaサーブレットに送信します。

httpRequest.open('POST', url, true);  
httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");  
httpRequest.setRequestHeader("Connection", "close");  
var jsonString = jsonObject.toJSONString();   
httpRequest.send(jsonString);

これにより文字列がサーブレットに送信されますが、期待どおりに表示されません。json文字列全体が、リクエストのパラメータの1つの名前に設定されます。したがって、サーブレットでrequest.getParameterNames();を実行するとします。これは、テーブルエントリのキーの1つを含む列挙を返し、オブジェクトの内容全体になります。誤解されているかもしれませんが、各キーを異なるパラメータ名に設定する必要があると思いました。したがって、arrayOne、arrayTwo、arrayThree、およびstringの4つのパラメーターが必要です。私は何か間違ったことをしているのですか、それともここで考えているのですか?どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2

1

これは予想される動作であり、オブジェクトを文字列に変換し(toJSONStringを使用)、要求パラメーターとして送信されます。Jackson、Jettison、XStreamなどのライブラリを使用してサーバー側でJSON値を解析することをお勧めします。http: //www.mkyong.com/java/how-to-convert-java-object-to-from-json-jacksonを参照してください。 //

于 2012-10-19T17:08:02.840 に答える
1

content-typeをに設定するapplication/x-www-form-urlencodedと、リクエストコンテンツが。の形式の文字列になることをサーバーに通知します"param1=value1&param2=value2..."。ただし、実際のコンテンツは1つの値にすぎません。x-www-form-urlencodedコンテンツタイプはJSONとは何の関係もありません。リクエストをJSONとして渡す場合は、content-typeをに設定してからapplication/json、サーバー側にJSONパーサーを設定して解析し、キーと値のペアを抽出する必要があります。

または、x-www-form-urlencoded typeJSONオブジェクトをループして、キーと値のペアごとに、値をJSON文字列とURLエンコードとしてシリアル化し、それを使用して次のようなリクエスト文字列を作成することもできます。

arrayOne=<arrayOne JSON string>&arrayTwo=<arrayTwo JSON String>&...
于 2012-10-19T17:06:12.470 に答える