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

Shi*_*jee 36 spring annotations spring-mvc

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

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

请帮忙!

Tou*_*one 41

@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";
}
Run Code Online (Sandbox Code Playgroud)

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

  • 这并不能回答问题。问题是询问具有多个同名值的参数。 (3认同)

Vit*_*dny 24

看来你无法得到

Map<String,String>
Run Code Online (Sandbox Code Playgroud)

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

试试这个:

public ModelAndView method(@RequestParam("myparam") List<String> params) { }
Run Code Online (Sandbox Code Playgroud)

  • 它应该是'@RequestParam'而不是'@RequestRaram'.注意'P'而不是'R'.我尝试使用上面的代码并得到一个错误,并没有立即抓住它,因为这种微妙的拼写错误.希望这有助于某人.谢谢你有用的答案:) (3认同)

Ral*_*lph 13

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

public ModelAndView postResultPage(@RequestParam MultiValueMap<String, String> params)
Run Code Online (Sandbox Code Playgroud)

@RequestParamjava doc(3.段落)中描述了此功能:

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

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

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


Bri*_*ian 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";

}
Run Code Online (Sandbox Code Playgroud)