使用 Ajax 将 @RequestBody 中的多个参数传递到 Spring MVC 控制器
尝试使用 @ 将多个参数传递到 Spring MVC 控制器时RequestBody,许多开发人员都会遇到是否有必要将参数包装在支持对象中的问题。
初始方法:
最初,您可以尝试执行以下操作:
@RequestMapping(value = "/Test", method = RequestMethod.POST) @ResponseBody public boolean getTest(@RequestBody String str1, @RequestBody String str2) {}
使用如下 JSON 负载:
{ "str1": "test one", "str2": "two test" }
但是,您可能会发现这种方法无法按预期工作。
包装对象方法:
要解决此问题,下一个方法是将参数包装在支持对象中:
@RequestMapping(value = "/Test", method = RequestMethod.POST) @ResponseBody public boolean getTest(@RequestBody Holder holder) {}
这需要如下所示的 JSON 有效负载:
{ "holder": { "str1": "test one", "str2": "two test" } }
替代选项:
或者,您可以将 RequestMethod 更改为 GET 并在查询字符串中使用 @RequestParam。另一种选择是将 @PathVariable 与任一 RequestMethod 一起使用。
使用 Map 或 ObjectNode:
如果不希望包装在支持对象中,您可以使用 Map 或Jackson的ObjectNode在@RequestBody中绑定多个参数:
@RequestMapping(value = "/Test", method = RequestMethod.POST) @ResponseBody public boolean getTest(@RequestBody Map<String, String> json) { //json.get("str1") == "test one" }
或者:
public boolean getTest(@RequestBody ObjectNode json) { //json.get("str1").asText() == "test one" }
以上是如何使用 @RequestBody 和 Ajax 将多个参数传递给 Spring MVC 控制器?的详细内容。更多信息请关注PHP中文网其他相关文章!