Spring MVC - 如何在Spring控制器的地图中获取所有请求参数?

问题

示例网址:

../search/?attr1=value1&attr2=value2&attr4=value4

我不知道attr1,att2和attr4的名称。

我希望能够做类似的事情(或类似的,不关心,只要我有权访问请求参数名称的 Map - >值:

@RequestMapping(value = "/search/{parameters}", method = RequestMethod.GET)
public void search(HttpServletRequest request, 
@PathVariable Map<String,String> allRequestParams, ModelMap model)
throws Exception {//TODO: implement}

如何使用Spring MVC实现这一目标?


#1 热门回答(250 赞)

虽然其他答案是正确的,但它肯定不是直接使用HttpServletRequest对象的"Spring方式"。如果你熟悉Spring MVC,答案实际上是quite simple and what you would expect

@RequestMapping(value = {"/search/", "/search"}, method = RequestMethod.GET)
public String search(
@RequestParam Map<String,String> allRequestParams, ModelMap model) {
   return "viewName";
}

#2 热门回答(30 赞)

编辑
已经指出存在(at least as of 3.0)纯Spring MVC机制,通过该机制可以获得该数据。我不会在这里详细说明,因为它是另一个用户的答案。有关详细信息,请参阅@AdamGent's answer,不要忘记对其进行投票。

在Spring 3.2文档中,这个机制在RequestMappingJavaDoc页面和RequestParamJavaDoc页面上都有提及,但之前只在RequestMapping页面中提到过。在2.5文档中没有提到这种机制。

这可能是大多数开发人员的首选方法,因为它删除了(至少这个)与servlet-api jar定义的HttpServletRequest对象的绑定。
/编辑
你应该可以访问请求查询字符串viarequest.getQueryString()

除了getQueryString之外,还可以从request.getParameterMap()作为Map检索查询参数。


#3 热门回答(12 赞)

HttpServletRequest对象已经提供了参数映射。有关更多详细信息,请参见request.getParameterMap()