假设单击了一个超链接,并使用以下参数列表myparam=myValue1&myparam=myValue2&myparam=myValue3
触发了一个URL。现在,如何在spring mvc中使用@RequestParam
捕获所有参数?
我的要求是我必须捕获所有参数并将它们放在地图中。
请帮忙!
答案 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,