正如其他答案所述,无法使用 servlet api 获取查询字符串参数。
所以,我认为获取查询参数的最佳方法是自己解析查询字符串。 (迭代参数并检查查询字符串是否包含参数更复杂)
我写了下面的代码来获取查询字符串参数。使用支持 CSV 分隔查询参数值的 apache StringUtils 和 ArrayUtils。
示例:username=james&username=smith&password=pwd1,pwd2 将返回
password : [pwd1, pwd2](长度 = 2)
username : [james, smith](长度 = 2)
public static Map<String, String[]> getQueryParameters(HttpServletRequest request) throws UnsupportedEncodingException {
Map<String, String[]> queryParameters = new HashMap<>();
String queryString = request.getQueryString();
if (StringUtils.isNotEmpty(queryString)) {
queryString = URLDecoder.decode(queryString, StandardCharsets.UTF_8.toString());
String[] parameters = queryString.split("&");
for (String parameter : parameters) {
String[] keyValuePair = parameter.split("=");
String[] values = queryParameters.get(keyValuePair[0]);
//length is one if no value is available.
values = keyValuePair.length == 1 ? ArrayUtils.add(values, "") :
ArrayUtils.addAll(values, keyValuePair[1].split(",")); //handles CSV separated query param values.
queryParameters.put(keyValuePair[0], values);
}
}
return queryParameters;
}