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

dps*_*dce 2 java servlets java-ee

我试图从请求对象获取完整的参数映射并迭代它.

这是示例代码

  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);
}
Run Code Online (Sandbox Code Playgroud)

产量

  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
Run Code Online (Sandbox Code Playgroud)

从输出中可以看出,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);
}
Run Code Online (Sandbox Code Playgroud)

它没有打印,但根据以前的输出它应该打印值,如果我删除instanceOf检查它给出ClassCastException.这是预期的行为还是我在这里做错了什么?

Har*_*Joy 6

[Ljava.lang.String;@XXXXXXX意味着它String不是一个单一的数组String.所以你的病情失败了,它没有打印任何东西.


imp*_*p25 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));
    }
Run Code Online (Sandbox Code Playgroud)