[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
BLOGTIMES
2009/09/27

getParameterMap()でjava.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.String]が出るときは

  java  programming 
このエントリーをはてなブックマークに追加

久しぶりにJavaでプログラミングをしているのですが、最近はPHP, Ruby, Perl, Pythonと弱い型付けの言語べったりという感じだったので、なかなか調子が戻りません。例えばこんな感じのコードを書いて、Eclipseの文法エラーが消えるのをずっと待ってたりとかするので、かなり重傷のようです。

str = "foo";

そんな調子で久しぶりにサーブレットでウェブアプリとか書いてみたりしたんですが、下記のようなコードのClass Cast Exceptionが取れずにどっぷりとハマってしまいました。

Map<String,String> map = request.getParameterMap();

で、エラーでググってみると世界中には同じことでハマっている人もいました。

java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.String When using HttpServletRequest getParameters() Stephen on Software aka SOS

So what it means is that it actually returns a type of Map instead of Map. So the correct defination is map.get(key) returns a String[] not a String. This is because request.getParameter(key) returns a String which is actually the first element of the resulting string array.

なるほど。getParameters()のMapのValueはString[]で、getParameter()は最初の値しか取れていないのか。そういえば遙か昔に、getParameter()で値が全部取れなくてハマった記憶もあるなぁ。ひとまず今回は下記のように書き換えて事なきを得ました。

Map<String,String[]> map = request.getParameterMap();

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/3221
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン