问题
示例网址:
../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文档中,这个机制在RequestMapping
JavaDoc页面和RequestParam
JavaDoc页面上都有提及,但之前只在RequestMapping
页面中提到过。在2.5文档中没有提到这种机制。
这可能是大多数开发人员的首选方法,因为它删除了(至少这个)与servlet-api jar定义的HttpServletRequest
对象的绑定。
/编辑
你应该可以访问请求查询字符串viarequest.getQueryString()
。
除了getQueryString之外,还可以从request.getParameterMap()作为Map检索查询参数。
#3 热门回答(12 赞)
HttpServletRequest对象已经提供了参数映射。有关更多详细信息,请参见request.getParameterMap()。