0

スプリングがパラメータをバインドする方法にいくつか問題があります。

私のシナリオでは、1つのクエリ引数'q'のみを受け入れるコントローラーメソッドが必要です。

@Controller
@RequestMapping("/home")
public class HomeController {

   @RequestMapping
   public void test(@RequestParam(value = "q") final String q) {
        System.out.println("> " + q);
   }

}

ここで、仕様に関して有効なリクエストを送信すると、次のようになります。

GET /home?q=cat

期待どおりの出力が得られます:

> cat

そして、私の仕様では無効であるが、httpリクエストとして有効なままであるリクエストを送信した場合:

GET /home?q=cat&q=black

あいまいで予期しない結果が得られます(なぜ春がそれを行うのかについては考えています...配列のバインドなど:)しかし、それは驚きのままです。):

> cat,black

これらのパラメータは使用できません。無効になる可能性があります。しかし、リクエストを検証する簡単な方法はありません。

4

1 に答える 1

1

パラメータをとして定義し、List<String>単一のアイテムしかないことを表明します。

@RequestMapping
public void test(@RequestParam(value = "q") final List<String> q) {

    if (q.size() > 1) {
        throw new IllegalArgumentException("Multiple 'q' parameters are not allowed.");
    }

    System.out.println("> " + q);
}
于 2013-02-28T12:43:21.820 に答える