首页 >Java >java教程 >如何使用 @RequestBody 和 Ajax 将多个参数传递给 Spring MVC 控制器?

如何使用 @RequestBody 和 Ajax 将多个参数传递给 Spring MVC 控制器?

Patricia Arquette
Patricia Arquette原创
2024-11-11 12:47:021066浏览

How to Pass Multiple Parameters to a Spring MVC Controller using @RequestBody with Ajax?

使用 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn