2011-12-05 63 views
2

我想从请求对象中获取完整的参数映射并遍历它。Request.getParameterMap值不能转换为字符串

这里是示例代码

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 

其明显从输出该值对象是字符串的一个实例

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异常。这是预期的行为还是我在这里做错了什么?

+0

三种可能性:以该数组转换为可打印字符串Arrays.toString()方法1.你重新声明类'String'地方(建议使用'java.lang.String',而不是'String'找到出来)? 2.运行两段代码时,你使用的是完全相同的值吗? 3.尝试使用'String.valueOf(value)'或'value.toString()'看看会发生什么。希望能帮助到你。 –

+0

啊,忘了上面的,这是一个数组。骗了我。 –

回答

6

[Ljava.lang.String;@XXXXXXX意味着它是一组String而不是一个String。所以你的条件失败了,它不会打印任何东西。

2

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

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

由于它返回的对象是一个字符串数组作为哈利乔伊指出,你将不得不使用

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)); 
    }