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

値オブジェクトが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); 
} 

のインスタンスであり、それはのようにしか印刷しないこと出力からその明らか出力

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 

あります以前の出力ごとに値を出力しているはずですが、instanceOfチェックを削除してもClassCastExceptionこれは期待された動作ですか、私はここで何か間違っていますか?

+0

三つの可能性:1.あなたは(見つけるために、代わりにSTRING' 'の' java.lang.String'を使用してみてくださいどこかにクラス 'STRING'を再宣言しましたでる)? 2. 2つのコードを実行するとき、まったく同じ値を使用していますか? 3. 'String.valueOf(value)'または 'value.toString()'を使って何が起こるかを見てみましょう。それが役に立てば幸い。 –

+0

ああ、忘れて、それは配列です。私をだました。 –

答えて

6

[Ljava.lang.String;@XXXXXXXは、Stringの配列ではなく、Stringの配列であることを意味します。あなたの状態は失敗し、何も印刷されません。

2

値は配列です。返されるオブジェクトは、ハリー喜びが指摘したように、あなたが使用する必要があります文字列の配列であるとして

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

:あなたは、配列が空でないことを確認している場合は、このような文字列値を取得する必要があります印刷可能な文字列にその配列を変換するために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)); 
    } 
関連する問題