1

@RequestMapping URI テンプレートについて質問があります。ユーザーの詳細の更新を処理するコントローラーを作成しました。そして、以下に2つの方法を書きます。

@RequestMapping(value="/updateUser/{applicationModuleType}/{userCountryCode}/{applicationModuleId}")
public @ResponseBody Object handleUpdateUserDetailsRequest(@PathVariable String applicationModuleType,
                                                           @PathVariable String userCountryCode, 
                                                           @PathVariable String applicationModuleId,
                                                           Model model) {
    System.out.println("************ form:Submited");
    }
    return null;
}

@RequestMapping(value="/updateUser/**")
public @ResponseBody Object handleRequest(Model model) {
    System.out.println("************ form:Submited all");
    return null;
}

リクエスト URI は /project_name/updateUser/app/au/132 のようなものです

このアプリを tomcat で実行すると、最初のメソッドは呼び出されません。コントローラは常に 2 番目のものを使用します。しかし、Spring フレームワークのドキュメントでは、「メソッドは任意の数の @PathVariable アノテーションを持つことができます」と述べています。

したがって、メソッドに 3 つの @PathVariable アノテーションを付けられない理由がわかりません。

もう1つは、最初のメソッド @RequestMapping アノテーションを次のように変更すると、呼び出すことができます。

    @RequestMapping(value="/updateUser/app/{userCountryCode}/{applicationModuleId}")
public @ResponseBody Object handleUpdateUserDetailsRequest(@PathVariable String userCountryCode, 
                                                           @PathVariable String applicationModuleId,
                                                           Model model) {
    System.out.println("************ form:Submited");
    }
    return null;
}

Spring は 1 つのメソッドで 3 つの @PathVariable アノテーションを処理できないようです。

なぜ、どこで間違ったのか教えてくれる人はいますか?

前もって感謝します!

4

2 に答える 2

3

パス変数とは関係ありません。単にマッピングが競合しています。

/updateUser/**

/updateUser/{applicationModuleType}/{userCountryCode}/{applicationModuleId}

同じ URI:s に一致します。

于 2012-02-20T10:07:49.113 に答える
2

@PathVariable アノテーションが 3 つある場合、Spring は @RequestMapping(value="/updateUser/**") がそれ以上に一致すると判断します /updateUser/{applicationModuleType}/{userCountryCode}/{applicationModuleId}

外すと

@RequestMapping(value="/updateUser/**")

あなたはそれが呼び出すことがわかります

@RequestMapping(value="/updateUser/{applicationModuleType}/{userCountryCode}/{applicationModuleId}")

@RequestParam を使用してパラメーターを渡す必要があります。@PathVariable ではありません。

于 2012-02-20T10:07:05.710 に答える