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

时间:2011-09-05 20:21:43

标签: java spring spring-mvc

示例网址:

../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实现这一目标?

10 个答案:

答案 0 :(得分:285)

虽然其他答案是正确的,但它肯定不是直接使用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";
}

答案 1 :(得分:32)

<强> 修改

已经指出存在(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对象的绑定。

<强> /编辑

您应该可以通过request.getQueryString()访问请求查询字符串。

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

答案 2 :(得分:13)

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

答案 3 :(得分:9)

你可以简单地使用它:

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

应该可以正常工作

答案 4 :(得分:6)

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

答案 5 :(得分:6)

有两个接口

  1. org.springframework.web.context.request.WebRequest
  2. org.springframework.web.context.request.NativeWebRequest
  3. 允许通用请求参数访问以及request/session属性访问, ,与本机Servlet / Portlet API无关

    例:

    @RequestMapping(value = "/", method = GET)
    public List<T> getAll(WebRequest webRequest){
        Map<String, String[]> params = webRequest.getParameterMap();
        //...
    }
    

    P.S。 There are关于可以用作控制器参数的参数的文档。

答案 6 :(得分:5)

我可能迟到了, 但根据我的理解,你正在寻找这样的东西:

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

答案 7 :(得分:5)

以下是在地图中获取请求参数的简单示例。

$_SESSION['hi2']

在这种情况下,它会将studentName和studentEmail的值分别与名称和电子邮件变量绑定。

答案 8 :(得分:2)

geom_smooth()

///所有参数都将存储到jsonObejct

答案 9 :(得分:1)

查询参数和路径参数之间存在根本区别。它是这样的: www.your_domain?queryparam1=1&queryparam2=2 - 查询参数。 www.your_domain/path_param1/entity/path_param2 - 路径参数。

我发现令人惊讶的是,在Spring MVC世界中,很多人将其中一个混淆了。 虽然查询参数更像是搜索的标准,但路径参数很可能唯一地标识资源。话虽如此,但这并不意味着您的URI中不能有多个路径参数,因为资源结构可以嵌套。例如,假设您需要特定人员的特定汽车资源:

www.my_site/customer/15/car/2 - 寻找第15位客户的第二辆车。

将所有路径参数放入地图的用例是什么?当您查看URI本身时,路径参数没有“键”,地图中的那些键将从@Mapping注释中获取,例如:

@GetMapping("/booking/{param1}/{param2}")

从HTTP / REST角度来看,路径参数无法真正投影到地图上。在我看来,这完全取决于Spring的灵活性以及他们想要容纳任何开发人员的愿望。

我绝不会将地图用于路径参数,但它对查询参数非常有用。