1

这是我的代码

Iterator it = request.getParameterMap().entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry pairs = (Map.Entry)it.next();
            System.out.println(pairs.getKey() + " = " + pairs.getValue());
            it.remove(); // avoids a ConcurrentModificationException
        }

其中请求是 HttpServletRequest。这是我在控制台中得到的输出

id = [Ljava.lang.String;@3f13bf94
title = [Ljava.lang.String;@5eea278c
dlPhone = [Ljava.lang.String;@98a6bd1
name = [Ljava.lang.String;@77736513

为什么这个 Ljava.lang.String???? 如何获得确切的价值?

4

3 回答 3

5

为什么这个 Ljava.lang.String?

因为每个值都可能是 a ,并且直接在数组上String[]调用并没有提供任何特别有用的东西 - 只是从 继承的正常实现,它指示类型和系统生成的哈希码。toStringObject

要获得有用的表示,您可以使用:

String key = (String) pairs.getKey();
String[] values = (String[]) pairs.getValue();
System.out.println(key + " = " + Arrays.toString(values));

请注意,泛型会使这一点更清楚,但如果getParameterMap仅声明为 return Map,则您没有太多工作要做。您可以执行未经检查的强制转换以至少减少代码量 - 但它实际上并没有在强制转换时为您提供安全:

@SuppressWarnings("unchecked")
Map<String, String[]> map = (Map<String, String[]>) request.getParameterMap();
for (Map.Entry<String, String[]> entry : map) {
    System.out.println(entry.getKey() + " = " + Arrays.toString(entry.getValue()));
}
于 2013-06-12T06:34:44.193 回答
3

发生这种情况是因为pairs.getValue()正在返回字符串数组。只需调试并检查即可。

您应该在这里迭代pairs.getValue()并打印每个条目以达到您的目的,或者执行 Arrays.toString( (String[])pairs.getValue() )

于 2013-06-12T06:35:15.190 回答
0

尝试这个:

Iterator it = request.getParameterMap().keySet().iterator();
        while (it.hasNext()) {
            String key = (String)it.next();
            System.out.println(key + " = " + requset.getParameter(key));
            //it.remove(); // avoids a ConcurrentModificationException
            // ??? why ???
        }
于 2013-06-12T06:39:03.137 回答