如何使用@RequestParam使用Spring MVC捕获多个参数?

nkhmeac6  于 2023-05-16  发布在  Spring
关注(0)|答案(9)|浏览(176)

假设单击了一个超链接,并使用以下参数列表myparam=myValue1&myparam=myValue2&myparam=myValue3触发了一个url。现在我如何在spring mvc中使用@RequestParam捕获所有参数?
我的要求是我必须捕获所有的参数并将它们放在一个map中。
救命啊!

s8vozzvw

s8vozzvw1#

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

knsnq2tg

knsnq2tg2#

看来你得不到

Map<String,String>

因为所有的参数都有相同的名字“myparam”
试试这个:

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

nnsrf1az3#

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

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

@RequestParam java文档(3.段落):
注解,该注解指示方法参数应绑定到Web请求参数。支持Servlet和Portlet环境中带注解的处理程序方法。
如果方法参数类型为Map并且指定了请求参数名称,则假定适当的转换策略可用,则将请求参数值转换为Map。

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

dhxwm5r4

dhxwm5r44#

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

}
zaqlnxep

zaqlnxep5#

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

j8yoct9x

j8yoct9x6#

Spring mvc可以支持List<Object>Set<Object>Map<Object> param,但不支持@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>的示例显示在my github中。

vshtjzan

vshtjzan7#

您可以使用多个参数

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

   return "profile";
}
8tntrjer

8tntrjer8#

对于同名的参数,可以使用MultiValueMap<String,String>。然后所有的值都将以List的形式显示

nwo49xxi

nwo49xxi9#

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

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

相关问题