0

Ajax と JSON を使用してコントローラーにデータを渡そうとしています。

HTML テーブルがあり、そのテーブルの複数の座標をコントローラーに送信する必要があります。そこで、この種の匿名オブジェクトを含む Javascript 配列を作成しました。

{ 
    DAY: someIndex, 
    HOUR: someOtherIndex 
}

この配列を呼び出しcoordinatesて、次のようにシリアル化します。

JSON.stringify(coordinates)

そのため、ajax call( type: POST) で を使用しdata: JSON.stringify(coordinates)ました。

私のドキュメントの準備ができて、私が使用した:

$.ajaxSetup({
    headers : {
        Accept : "application/json; charset=utf-8"
    }
}); 

そして、私のコントローラーは次のようになります。

@RequestMapping(value = "/{id}", method = RequestMethod.POST)
public @ResponseBody
String update(@PathVariable int id, @RequestBody String coordinates, HttpServletResponse response) {

    // Do something here to convert it in my complex structure

}

ただし、パラメータの型がどうあるべきかわかりませんcoordinates

を使用してGSONいます。そして、簡単にデシリアライズできませんでした。このソリューションを使用してみましたが、うまくいきませんでした。(何らかの理由で型をキャストするように求め続けました。)

これを正しく逆シリアル化できるとは思わなかったので、座標を別の形式 (座標がトークンで分割された単なる JSON 配列の文字列) としてシリアル化しようとしました (;) here

したがって、私の配列のjavascriptオブジェクトは次のように作成されますforeach:

coordinates.push( someIndex.toString() + ";" + someOtherIndex.toString() );

そして、文字列化部分を保持しました。

そのPOSTため、コントローラーにデータを送信すると、値を出力するSystem.out.println(coordinates)と、出力が奇妙に見えます。

%5B%220%3B8%22%5D=

Javascript コンソールでのこのオブジェクトの場合: ["0;8"].

だから私の質問:

  1. これは良いアプローチですか?
  2. JSON配列をいくつかのJava型に逆シリアル化することは可能ですか? のようなList<Coordinate>String(コントローラーの代わりにこのタイプを使用しようとしましたが、エラーが発生します415 - Unsupported media type
  3. String アプローチを使用している場合、その意味不明なことを私が望むものに変換する方法はありますか?
4

1 に答える 1

1

%5B%220%3B8%22%5D=サーバー側で取得すると、jQueryはデフォルトでデータをクエリ文字列にシリアル化します。

リクエストのコンテンツタイプをjQueryオプションをapplication/json使用するように設定する必要があります。contentType

次に、RequestBody変換を簡単にするために、GsonHttpMessageConverterの実装を確認することをお勧めします。これが1つで、 Android用の春に1つあるように見えるので、おそらくそれを使用できます。

于 2012-11-19T00:25:43.790 に答える