如何使用 Spring MVC 在 post 方法中传递 List<String>?
Posted
技术标签:
【中文标题】如何使用 Spring MVC 在 post 方法中传递 List<String>?【英文标题】:How to pass List<String> in post method using Spring MVC? 【发布时间】:2016-04-19 18:22:09 【问题描述】:我需要在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"]
【问题讨论】:
您是在橙色之后关闭报价还是堆栈上的错字?"fruits":["apple","orange"]
是的,我做到了。这只是我的示例代码复制粘贴错误。错误的请求错误仍然存在
也许这可以帮助你***.com/a/25523151/1793718
对于给定的 json 如何在 @RequestBody 中使用 Map<String, List<String>>
而不是 List您使用了错误的 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)
...
【讨论】:
正确答案。您可以通过反向执行该过程轻松确定可能发生的情况,即编写一个返回列表的 JSON 表示的方法返回 ["orange", "apple"],如上所述。 当我尝试 List我有同样的用例, 您可以通过以下方式更改方法定义:
@RequestMapping(value = "/saveFruits", method = RequestMethod.POST,
consumes = "application/json")
@ResponseBody
public ResultObject saveFruits(@RequestBody Map<String,List<String>> fruits)
..
唯一的问题是它接受任何代替“水果”的键,但如果它不是大功能,您可以轻松摆脱包装器。
【讨论】:
【参考方案3】:如果您想保持方法不变,您可以将输入作为["apple","orange"]
传递。
它使用类似的方法签名对我有用。
【讨论】:
以上是关于如何使用 Spring MVC 在 post 方法中传递 List<String>?的主要内容,如果未能解决你的问题,请参考以下文章
我们如何在 Spring MVC 中调用 requestmethod=POST?
Spring MVC HTTP 状态 405 - 不支持请求方法“POST”
使用 Spring MVC Test 对多部分 POST 请求进行单元测试
Ajax POST 导致 405(不允许的方法) - Spring MVC