2

あなたの非常に賢いscalaの人々の1人が次の問題を説明できるかもしれないと思いました。

次のサービスは常に 400 を返します (クライアントによって送信された要求は構文的に正しくありません ()) - springmvc からのあまり役に立たないエラーの 1 つですが、通常はパラメーターが適切に指定されていない場合に発生します。ただし、 None でマッピングを行っている行を削除すると機能します。また、param を参照するローカル val を作成し、代わりにそれをマップすると、それも機能します。

@RequestMapping(value = Array("/willfail/{param}/"))  
def willFail(@PathVariable param:String):String={
    println("This line never even gets executed.")

    //Remove following line and it works.
    None.map(_ == param )

    //Whatever..
    "somepage"
}

蹴ったり叫んだりしているみんなをscalaに引きずり込んでしまったのでちょっと恥ずかしいですし、ちょっと罪悪感を覚えたのは初めてのケースです。

4

1 に答える 1

1

Biju Kunjummen が正しく指摘したように、これはデバッグ情報からのパラメーター名の再構築に関連しています。

が存在するNone.map(_ == param ) scalac場合、何らかの理由で別のパラメーター名 (param$1の代わりにparam) がデバッグ情報に書き込まれるため ( で確認できますjavap -c -l)、Spring MVC はパラメーターをパス変数に関連付けることができません。

回避策として、パラメーター名を明示的に指定することができます ( @PathVariable("param"))。これにより、デバッグ情報なしでコンパイルされた場合でもプログラムが機能します。

于 2012-08-23T22:57:17.913 に答える