次のように、JQueryを介してRESTベースのサービスに送信するJavaScriptコードに文字列のリストがあります。
var ids = [];
$("input:checked").each(function() {
ids.push(this.id);
});
var selectedIds = JSON.stringify(ids);
$.post("/todonotes/tasks/removeTask", selectedIds,function(e) {
}, "json");
ご覧のとおり、JavaScript配列をJSON配列に変換します。
ここで、サーバー側では、Spring MVCとJacksonを使用して、入力JSONを受信して解析します。
@RequestMapping(value="/tasks/removeTask", method = RequestMethod.POST)
public @ResponseBody String removeTask(@RequestBody List<String> selectedIds) {
...
}
しかし、私はいつも得ます:
HTTP Status 415 -
--------------------------------------------------------------------------------
type Status report message
description The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.
JSONオブジェクトから引用符を削除しようとしましたが、使用@RequestParam
も成功しませんでした。
OQJFの提案に従って更新します。
投稿リクエストを次のように変更しました。
$.post("/todonotes/tasks/removeTask", {selectedIds: selectedIds},function(e) {
}, "json");
これでコントローラーメソッドが呼び出されましたが、各List
要素には二重引用符と角かっこが入力されています。これはリスト引数です:
[["15", "21"]]
たとえば、最初の要素は次のようになります。
["15"
String
の各要素を解析したくないList
。
また、変換を削除しようとしましたJSON.stringify
が、コントローラーが呼び出されませんでした。これで私は得ました:
HTTP Status 400 - Required List parameter 'selectedIds' is not present
--------------------------------------------------------------------------------
type Status report
message Required List parameter 'selectedIds' is not present
description The request sent by the client was syntactically incorrect.
アップデート
次のように、IDを保持するオブジェクトを作成しようとしました。
public class TaskIdHolder {
private String[] selectedIds;
public String[] getSelectedIds() {
return selectedIds;
}
public void setSelectedIds(String[] selectedIds) {
this.selectedIds = selectedIds;
}
}
次に、コントローラーメソッドのシグネチャを変更しました。
public @ResponseBody String removeTask(@RequestBody TaskIdHolder selectedIds) {
そして、私のJSONリクエストは次のようになります。
{"selectedIds":["15"]}
Andreiの提案に従って、Jqueryコードも変更しました。
var data = JSON.stringify({selectedIds:selectedIds});
$.post("/todonotes/tasks/removeTask", data, function(e) {
selectedIdsはJavaScript配列です。
しかし今、私は次のようになります。
POST http://localhost:8080/todonotes/tasks/removeTask 415 (Unsupported Media Type)