如何使用 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&lt;String, List&lt;String&gt;&gt; 而不是 List 不需要额外的包装类。 【参考方案1】:

您使用了错误的 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 对象时;没有工作,我有内容类型错误,我在包装器中使用了 ArrayList 并且它工作得很好【参考方案2】:

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

@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

405 - 请求方法“POST”不支持 Spring MVC + Spring Security

HTTP 状态 405 - 不支持请求方法“POST”(Spring MVC)