Request.getParameterMap值不能转换为字符串

时间:2011-12-05 07:29:34

标签: java java-ee servlets

我正在尝试从请求对象中获取完整的参数映射并迭代它。

这是示例代码

  Map map = request.getParameterMap();
for(Object key : map.keySet()){
    String keyStr = (String)key;
    Object value = map.get(keyStr);     
    System.out.println("Key " + (String)key + "     :    " + value);
}

输出

  Key businessunit     :    [Ljava.lang.String;@388f8321
   Key site     :    [Ljava.lang.String;@55ea0889
  Key startDate     :    [Ljava.lang.String;@77d6866f
  Key submit     :    [Ljava.lang.String;@25141ee0
  Key traffictype     :    [Ljava.lang.String;@4bf71724

从输出中可以看出,value对象是String

的一个实例
now when i change my code to something like this

  Map map = request.getParameterMap();
  for(Object key : map.keySet()){
    String keyStr = (String)key;
    Object value = map.get(keyStr);
    if(value instanceof String)
    System.out.println("Key " + (String)key + "     :    " + (String)value);
}

它只打印任何内容,但按照上一个输出它应该打印值,如果我删除instanceOf检查它给出ClassCastException。这是预期的行为还是我在这里做错了什么?

3 个答案:

答案 0 :(得分:6)

[Ljava.lang.String;@XXXXXXX表示它是String而不是单个String的数组。因此,您的情况会失败并且不会打印任何内容。

答案 1 :(得分:6)

由于Harry Joy指出,返回的对象是一个字符串数组,您必须使用Arrays.toString()方法才能将该数组转换为可打印的字符串:

    Map map = request.getParameterMap();
    for (Object key: map.keySet())
    {
            String keyStr = (String)key;
            String[] value = (String[])map.get(keyStr);
            System.out.println("Key" + (String)key + "   :   " + Arrays.toString(value));
    }

答案 2 :(得分:2)

该值是一个数组。如果你确定数组不是空的,你应该得到这样的字符串值:

String value = (String) map.get(keyStr)[0];