在我的应用程序中,我必须提取请求的参数并按照它们在查询字符串中出现的顺序放入集合中。
例如,如果发件人提出以下请求,
http://myapp.com/myrequest?param3=value3¶m2=value2¶m1=value1 ,
我需要生成一个集合,其中的元素按以下顺序放置:param3、param2、param1。
为此,我首先使用getParameterNames
如下所示的方法提取参数的名称。
private List<String> getParameterNames(HttpServletRequest aRequest)
throws IOException {
final List<String> parameterNames = new LinkedList<>();
final BufferedReader reader = aRequest.getReader();
final String queryString = IOUtils.toString(reader);
final String[] parameterValuePairs = queryString.split("&");
for (String parameterValuePair : parameterValuePairs) {
final String[] nameValueArray = parameterValuePair.split("=");
parameterNames.add(nameValueArray[0]);
}
return parameterNames;
}
问题:调用此方法后,永远aRequest.getParameterValue(...)
返回null
参数名称。
如果我不这样做 - 首先保存参数映射,然后调用getParameterNames
,那么它的结果为空。
final Map<String,String[]> parameterMap = aRequest.getParameterMap();
final List<String> parameterNames = getParameterNames(aRequest);
我尝试了以下事情:
- 确保它
reader.close()
没有被调用getParameterNames
(我在其他地方读到这可能会导致问题)。 - 调用
reader.reset()
.
这些都没有帮助。
如何从 a 中获取参数值对列表,该列表HttpServletRequest
按参数在查询字符串中的外观排序?