示例URL:

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

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

我希望能够做这样的事情(或类似的,不关心,只要我可以访问请求参数名称->值的映射:

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


当前回答

虽然其他答案是正确的,但它肯定不是直接使用HttpServletRequest对象的“Spring方式”。答案实际上很简单,如果您熟悉Spring MVC,您就会知道这一点。

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

其他回答

虽然其他答案是正确的,但它肯定不是直接使用HttpServletRequest对象的“Spring方式”。答案实际上很简单,如果您熟悉Spring MVC,您就会知道这一点。

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

你可以简单地使用这个:

Map<String, String[]> parameters = request.getParameterMap();

应该没问题

我可能会迟到, 但据我所知,你要找的是这样的东西

for(String params : Collections.list(httpServletRequest.getParameterNames())) {
    // Whatever you want to do with your map
    // Key : params
    // Value : httpServletRequest.getParameter(params)                
}

在你的控制器方法中使用org.springframework.web.context.request.WebRequest作为参数,它提供了getParameterMap()方法,好处是你不用把你的应用程序绑定到Servlet API, WebRequest是JavaEE模式上下文对象的一个例子。

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