【问题标题】:How to pass List<String> in post method using Spring MVC?如何使用 Spring MVC 在 post 方法中传递 List<String>?
【发布时间】: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"]}
  • 是的,我做到了。这只是我的示例代码复制粘贴错误。错误的请求错误仍然存​​在
  • 也许这可以帮助你stackoverflow.com/a/25523151/1793718
  • 对于给定的 json 如何在 @RequestBody 中使用 Map&lt;String, List&lt;String&gt;&gt; 而不是 List 不需要额外的包装类。

标签: spring rest spring-mvc


【解决方案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"] 传递。

    它使用类似的方法签名对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 2011-07-20
      • 2014-04-25
      • 2016-05-08
      • 1970-01-01
      相关资源
      最近更新 更多