为什么参数值是`request.getParameterMap().get(name)`的Object哈希码

Die*_*ntz 2 java servlets

为什么参数值是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)

Bal*_*usC 9

因为它返回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)


aio*_*obe 5

参数映射是从参数名称到值数组的映射。这是因为同一参数可能有多个值。例如考虑以下请求:

http://www.example.com/var=value1&var=value2

{ "value1", "value2" }在这种情况下,您在获取 的参数时会得到var

如果要打印给定参数的所有值,可以使用Arrays.toString值数组。

如果您知道每个变量最多有一个值,则可以使用getParameter. 来自文档:

仅当您确定参数只有一个值时才应使用此方法。如果参数可能有多个值,请使用 getParameterValues(java.lang.String)。