为什么参数值是Object哈希码:
input_name:[[Ljava.lang.String;@3f4d64]
Run Code Online (Sandbox Code Playgroud)
我以为代码request.getParameterMap().get(name);会产生request参数的值:
Enumeration params = request.getParameterNames();
while(params.hasMoreElements())
{
String name = (String)params.nextElement();
String value = request.getParameterMap().get(name);
logger.log(name + ": " + value);
}
Run Code Online (Sandbox Code Playgroud)
因为它返回a String[],而不是a String.javadoc getParameterMap()也告诉我:
返回:
一个不可变的java.util.Map,包含作为键的参数名称和作为映射值的参数值.参数映射中的键是String类型.参数映射中的值是String数组类型.
所以你需要将它视为一个数组.如果您想获得单个(第一个)参数值,请request.getParameter()改用.这是一个重写:
for (String name : Collections.<String>list(request.getParameterNames())) {
String value = request.getParameter(name);
logger.log(name + ": " + value);
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您确实想要检查所有可能的参数值,那么只需遍历地图的入口集:
Map<String, String[]> map = request.getParameterMap();
for (Entry<String, String[]> entry : map.entrySet()) {
String name = entry.getKey();
String[] values = entry.getValue();
logger.log(name + ": " + Arrays.toString(values));
}
Run Code Online (Sandbox Code Playgroud)
参数映射是从参数名称到值数组的映射。这是因为同一参数可能有多个值。例如考虑以下请求:
http://www.example.com/var=value1&var=value2
{ "value1", "value2" }在这种情况下,您在获取 的参数时会得到var。
如果要打印给定参数的所有值,可以使用Arrays.toString值数组。
如果您知道每个变量最多有一个值,则可以使用getParameter. 来自文档:
仅当您确定参数只有一个值时才应使用此方法。如果参数可能有多个值,请使用 getParameterValues(java.lang.String)。