如何使用Spring MVC在post方法中传递List <string>?

时间:2016-01-14 12:14:05

标签: spring rest spring-mvc

我需要在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"]}

3 个答案:

答案 0 :(得分:40)

您使用的是错误的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){
...
}

答案 1 :(得分:0)

我有相同的用例, 您可以通过以下方式更改方法定义:

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

唯一的问题是它可以接受任何键来代替“水果”,但是如果它不是主要功能,则可以轻松摆脱包装器。

答案 2 :(得分:0)

如果您想保持原样,可以将输入作为["apple","orange"]传递。

它对我来说具有类似的方法签名。