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

时间:2014-03-14 07:39:27

标签: spring spring-mvc annotations

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

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

请帮忙!

7 个答案:

答案 0 :(得分:37)

@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。

答案 1 :(得分:23)

似乎你无法得到

Map<String,String>

因为你的所有参数都有相同的名字“myparam”

请改为尝试:

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

答案 2 :(得分:12)

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

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

@RequestParam java doc(3。段落)中描述了此功能:

  

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

     

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

     

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

答案 3 :(得分:6)

从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";

}

答案 4 :(得分:0)

如果有人尝试在Spring Boot中执行相同的操作,请使用RequestBody代替RequestParam

答案 5 :(得分:0)

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>的参数,则可以使用这样的网址

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

记住要对网址进行编码,编码后的网址是这样的:

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

my github中显示List<Object>Set<Object>Map<Object>的示例。

答案 6 :(得分:0)

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

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