【发布时间】:2013-10-07 18:04:19
【问题描述】:
在我的应用程序中,我必须提取请求的参数并按照它们在查询字符串中出现的顺序放入集合中。
例如,如果发送者发出以下请求,
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 for ever 参数名称。
如果我不这样做-首先保存参数映射,然后调用getParameterNames,则其结果为空。
final Map<String,String[]> parameterMap = aRequest.getParameterMap();
final List<String> parameterNames = getParameterNames(aRequest);
我尝试了以下方法:
- 确保
reader.close()没有在getParameterNames中调用(我在其他地方读到这可能会导致问题)。 - 调用
reader.reset()。
这些都没有帮助。
如何从HttpServletRequest 中获取参数值对列表,该列表按参数在查询字符串中的外观排序?
【问题讨论】: