有没有办法从HttpServletRequest对象中获取仅POST参数?
例如,PHP具有$ _POST超全局变量,而Perl的CGI.pm仅在HTTP方法为POST(默认情况下)时检索POST参数。
HttpServletRequest.getParameter(String)将包括 GET URL参数,即使HTTP方法是POST也是如此。
如果你可以访问参数名称定义,当你遍历getParameterNames()结果时,你可以使用前缀来区分它们两个。
你可以解析URL创建一个URL对象,并使用getQuery()方法仅获取参数。然后,使用一些实用程序类(例如ParameterParser在 HttpClient库中)来解析查询字符串上的参数。最后,从getParameterNames()结果中减去这些名称。
HttpServletRequest.getQueryString()
并检查其中是否存在参数。public boolean isInQuery(HttpServletRequest request, String key) {
String query = request.getQueryString();
String[] nameValuePairs = query.split("&");
for(String nameValuePair: nameValuePairs) {
if(nameValuePair.startsWith(key + "=")) {
return true;
}
}
return false;
}
这个问题在相关帖子中得到了解答:
Normaly you can GET and POST parameters in a servlet the same way:
request.getParameter("cmd");
But only if the POST data is encoded as key-value pairs of content type: "application/x-www-form-urlencoded" like when you use a standard HTML form.
我不确定这是否可行,但您可以尝试使用request.getReader()
提取POST正文的原始内容。容器可能会在将控制权交给您的应用程序之前删除该数据,即使它没有这样做,您也必须自己解码参数字符串。