[英]how to capture some parameters using @RequestParam using spring mvc?
[英]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.