web-dev-qa-db-ja.com

Spring MVCを使用してpostメソッドでList <String>を渡す方法は?

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"]}

22
user2359634

間違った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){
...
}
49
wcislo

私は同じユースケースを持っていました、次の方法でメソッド定義を変更できます:

@RequestMapping(value = "/saveFruits", method = RequestMethod.POST, 
    consumes = "application/json")
@ResponseBody
public ResultObject saveFruits(@RequestBody Map<String,List<String>> fruits) {
    ..
}

唯一の問題は、「フルーツ」の代わりに任意のキーを受け入れることですが、大きな機能でない場合はラッパーを簡単に取り除くことができます。

0
Mitesh Ukate

メソッドをそのままにする場合は、["Apple","orange"]として入力を渡すことができます。

同様のメソッドシグネチャで機能しました。

0