这是我的代码
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
}
其中request是HttpServletRequest。这是我在控制台中获得的输出
id = [Ljava.lang.String;@3f13bf94
title = [Ljava.lang.String;@5eea278c
dlPhone = [Ljava.lang.String;@98a6bd1
name = [Ljava.lang.String;@77736513
为什么这个Ljava.lang.String ????如何获得准确的价值?
答案 0 :(得分:5)
为什么这个Ljava.lang.String?
因为每个值大概都是String[]
,并且直接在数组上调用toString
并没有提供任何特别有用的东西 - 只是从Object
继承的正常实现,它表示类型和系统生成的哈希码。
要获得有用的表示,您可以使用:
String key = (String) pairs.getKey();
String[] values = (String[]) pairs.getValue();
System.out.println(key + " = " + Arrays.toString(values));
请注意,泛型会使这一点更加清晰,但如果getParameterMap
仅被声明为返回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()));
}
答案 1 :(得分:3)
这是因为pairs.getValue()
正在返回String数组。只需调试并检查一下。
您应该在pairs.getValue()
上进行迭代并在此处打印每个条目,或者这样做
Arrays.toString( (String[])pairs.getValue() )
答案 2 :(得分: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 ???
}