繁体   English   中英

"如何使用spring mvc使用@RequestParam捕获多个参数?"

[英]how to capture multiple parameters using @RequestParam using spring mvc?

假设单击了一个超链接并使用以下参数列表myparam=myValue1&myparam=myValue2&myparam=myValue3触发了一个 url。 现在如何在 spring mvc 中使用@RequestParam捕获所有参数?

我的要求是我必须捕获所有参数并将它们放在地图中。

请帮忙!

@RequestMapping(value = "users/newuser", method = RequestMethod.POST)   
public String saveUser(@RequestParam Map<String,String> requestParams) throws Exception{
   String userName=requestParams.get("email");
   String password=requestParams.get("password");

   //perform DB operations

   return "profile";
}

您可以以上述方式使用 RequestParam。

好像拿不到

Map<String,String>

因为您所有的参数都具有相同的名称“myparam”

试试这个:

public ModelAndView method(@RequestParam("myparam") List<String> params) { }

要一次获取所有参数,请尝试以下操作:

public ModelAndView postResultPage(@RequestParam MultiValueMap<String, String> params)

这个特性在@RequestParam java doc (3. Paragraph) 中有描述:

指示方法参数应绑定到 Web 请求参数的注释。 支持 Servlet 和 Portlet 环境中带注释的处理程序方法。

如果方法参数类型为 Map 并且指定了请求参数名称,则假定适当的转换策略可用,请求参数值将转换为 Map。

如果方法参数是Map<String, String>MultiValueMap<String, String>并且未指定参数名称,则使用所有请求参数名称和值填充 map 参数。

从 Spring 3.0 开始,您还可以使用MultiValueMap来实现这一点:

一个基本的例子是:

public String someMethod(@RequestParam MultiValueMap<String,String> params) {

    final Iterator<Entry<String, List<String>>> it = params.entrySet().iterator();

    while(it.hasNext()) {
        final String k = it.next().getKey();
        final List<String> values = it.next().getValue();
    }

    return "dummy_response";

}

如果有人试图在 Spring Boot 中做同样的事情,请使用RequestBody代替RequestParam

Spring mvc 可以支持List<Object>Set<Object>Map<Object>参数,但不支持 @RequestParam

List<Object>为例,如果你的对象是User.java ,它是这样的:

public class User {
    private String name;
    private int age;

    // getter and setter
}

并且你想传递一个List<User>的参数,你可以像这样使用 url

http://127.0.0.1:8080/list?users[0].name=Alice&users[0].age=26&users[1].name=Bob&users[1].age=16

记得对url进行编码,编码后的url是这样的:

http://127.0.0.1:8080/list?users%5B0%5D.name=Alice&users%5B0%5D.age=26&users%5B1%5D.name=Bob&users%5B1%5D.age=16

List<Object>Set<Object>Map<Object>示例显示在我的 github 中

您可以使用多个 @RequestParam 注释,如下所示。

@RequestParam(value="myparam1", required = true) <Datatype> myparam1,
@RequestParam(value = "myparam2", required = false) <Datatype> myparam2,

您可以这样使用多个参数

public String saveUser(@RequestParam("email") String userName, @RequestParam("password") String password) throws Exception{
   //your code
   //perform DB operations

   return "profile";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM