HttpServletRequest – 获取查询string参数,无表单数据

在HttpServletRequest中 , getParameterMap返回所有查询string参数和发布数据参数的映射。

有没有办法获得唯一查询string参数的地图? 我试图避免使用getQueryString和parsing出的值。

与cularis说的相反,在参数图中可以同时存在。

我看到的最好的方法是代理参数映射和每个参数检索如果queryString包含“&?<parameterName> =”。

请注意,参数名称需要在进行检查之前进行URL编码,正如Qerub指出的那样。

这可以节省您的parsing,并只给你只有URL参数。

你可以使用request.getQueryString() ,如果查询string是

 username=james&password=pwd 

要获得名称,你可以做到这一点

 request.getParameter("username"); 

servlet API缺乏这个function,因为它是在很多人认为查询string和消息体是发送参数的两种不同方式的时候创build的,没有意识到参数的目的是根本不同的。

查询string参数?foo = bar是URL的一部分,因为它们涉及识别资源(可能是许多资源的集合),如“所有42岁以上的人”:

GET /人?年龄= 42

POST或PUT中的消息正文参数用于表示对目标资源的修改。 Fx为属性“头发”设置一个值:

PUT /人?年龄= 42

头发=灰色

所以它是绝对RESTful同时使用查询参数和正文参数,分开,以便您可以将它们用于不同的目的。 Java servlet API中肯定缺less这个function。

作为其他答案状态,使用servlet api获取查询string参数是没有办法的。

所以,我认为获取查询参数的最好方法是自己parsing查询string。 (迭代参数和查询string是否包含参数会更复杂)

我写下面的代码来获取查询string参数。 使用apache的StringUtils和ArrayUtils。

 public static Map<String, String[]> getQueryParameters(HttpServletRequest request) { Map<String, String[]> queryParameters = new HashMap<>(); String queryString = request.getQueryString(); if (StringUtils.isEmpty(queryString)) { return queryParameters; } String[] parameters = queryString.split("&"); for (String parameter : parameters) { String[] keyValuePair = parameter.split("="); String[] values = queryParameters.get(keyValuePair[0]); values = ArrayUtils.add(values, keyValuePair.length == 1 ? "" : keyValuePair[1]); //length is one if no value is available. queryParameters.put(keyValuePair[0], values); } return queryParameters; } 

恐怕没有办法让查询string参数与post参数分开parsing。 顺便说一句,这样的API缺席可能意味着你可能应该检查你的devise。 为什么在发送POST时使用查询string? 如果你真的想发送更多的数据到URL使用类似REST的约定,例如,而不是发送

http://mycompany.com/myapp/myservlet?first=11&second=22

说:

http://mycompany.com/myapp/myservlet/11/22