POST
メソッドのリクエストボディで値のリストを渡す必要がありますが、400: Bad Request error
。
以下は私のサンプルコードです。
@RequestMapping(value = "/saveFruits", method = RequestMethod.POST,
consumes = "application/json")
@ResponseBody
public ResultObject saveFruits(@RequestBody List<String> fruits) {
...
}
私が使用しているJSONは{"fruits":["Apple","orange"]}
間違ったJSONを使用しています。この場合、次のようなJSONを使用する必要があります。
["orange", "Apple"]
その形式のJSONを受け入れる必要がある場合:
{"fruits":["Apple","orange"]}
ラッパーオブジェクトを作成する必要があります。
public class FruitWrapper{
List<String> fruits;
//getter
//setter
}
そして、コントローラーメソッドは次のようになります。
@RequestMapping(value = "/saveFruits", method = RequestMethod.POST,
consumes = "application/json")
@ResponseBody
public ResultObject saveFruits(@RequestBody FruitWrapper fruits){
...
}
私は同じユースケースを持っていました、次の方法でメソッド定義を変更できます:
@RequestMapping(value = "/saveFruits", method = RequestMethod.POST,
consumes = "application/json")
@ResponseBody
public ResultObject saveFruits(@RequestBody Map<String,List<String>> fruits) {
..
}
唯一の問題は、「フルーツ」の代わりに任意のキーを受け入れることですが、大きな機能でない場合はラッパーを簡単に取り除くことができます。
メソッドをそのままにする場合は、["Apple","orange"]
として入力を渡すことができます。
同様のメソッドシグネチャで機能しました。