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

use*_*634 23 rest spring spring-mvc

我需要在POST方法的请求体中传递一个值列表,但我得到了400: Bad Request error.

以下是我的示例代码:

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

我使用的JSON是: {"fruits":["apple","orange"]}

wci*_*slo 51

您使用的是错误的JSON.在这种情况下,您应该使用如下所示的JSON:

["orange", "apple"]
Run Code Online (Sandbox Code Playgroud)

如果您必须接受该表单中的JSON:

{"fruits":["apple","orange"]}
Run Code Online (Sandbox Code Playgroud)

你必须创建包装器对象:

public class FruitWrapper{

    List<String> fruits;

    //getter
    //setter
}
Run Code Online (Sandbox Code Playgroud)

然后您的控制器方法应如下所示:

@RequestMapping(value = "/saveFruits", method = RequestMethod.POST, 
    consumes = "application/json")
@ResponseBody
public ResultObject saveFruits(@RequestBody FruitWrapper fruits){
...
}
Run Code Online (Sandbox Code Playgroud)

  • 正确答案。您可以通过反向进行该过程轻松地确定期望的结果,即编写返回列表的JSON表示形式的方法,返回如上所述的[“ orange”,“ apple”]。 (2认同)

Mit*_*ate 5

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

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

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