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