2011-12-05 60 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)); 
    }