春に複数の@RequestMappingアノテーションを使用するにはどうすればよいですか?


247

@RequestMappingメソッドに対して複数のアノテーションを使用することは可能ですか?

お気に入り :

@RequestMapping("/")
@RequestMapping("")
@RequestMapping("/welcome")
public String welcomeHandler(){
  return "welcome";
}

回答:


436

@RequestMappingにはString[]値パラメーターがあるため、次のように複数の値を指定できるはずです。

@RequestMapping(value={"", "/", "welcome"})


2
そうは言っても、「」または「/」の値を実際にアプリケーションで機能させるのに問題があります。彼らはあなたのために働きますか?
Ed Brannin、

複数のアノテーションを使用して、さまざまな成功ビューとフォームビューを各リクエストURLに関連付ける方法はありますか?
k-den

@EdBranninカスタム、ヘッダー、消費、
パラメーター

また、どのリクエストマッピングが呼び出されたかを知る方法を教えてください。それは/または歓迎ですか?
Siddharth 2017

1
@Siddharth 1.タイプHttpRequestのパラメーターを追加および検査できる場合があります。2.呼び出されたマッピングに本当に関心がある場合は、この手法を使用しないでください。;)
Ed Brannin 2017

24

私のテスト(春3.0.5)から@RequestMapping(value={"", "/"}) -機能するだけで"/"機能""しません。しかし、私はこれが機能することを発見しました:@RequestMapping(value={"/", " * "})" * "何にでも一致するため、他に何もない場合のデフォルトのハンドラーになります。


13

する必要はありません。RequestMappingアノテーションは、ワイルドカードとAntスタイルのパスをサポートしています。また、デフォルトのビューが必要なように見えるので、

<mvc:view-controller path="/" view-name="welcome"/>

あなたの設定ファイルで。これにより、ルートへのすべてのリクエストがウェルカムビューに転送されます。


これらの2つの行の間に何かがあるはずですか?私はFreeMarkerViewResolverを使用しているため、この方法を使用する必要があります...まあ、複数のViewResolverを作成するだけでよいと思います。
wuntee 2010年

2
複数のRequestMappingアノテーションが提供する柔軟性は提供されません。たとえば、1つのメソッドでPOSTを使用した値 "/ a"またはGETを使用した値 "/ b"のいずれかをサポートしたい場合。もちろん、回避策はかなり簡単です(3番目の方法で機能をリファクタリングします)が、それが便利だと言っているだけです。
サイモン2014

1

最短の方法は: @RequestMapping({"", "/", "welcome"})

あなたも行うことができますが:

  • @RequestMapping(value={"", "/", "welcome"})
  • @RequestMapping(path={"", "/", "welcome"})

1

現在、Spring-Boot 2.0.4を使用すると、{}は機能しません。

@RequestMapping

値パラメーターとしてString []がまだあるため、宣言は次のようになります。

 @RequestMapping(value=["/","/index","/login","/home"], method = RequestMethod.GET)

**アップデート-Spring-Boot 2.2で動作します**

 @RequestMapping(value={"/","/index","/login","/home"}, method = RequestMethod.GET)

角括弧は無効です。配列リテラルの有効な構文は、中かっこ{}を使用することです
luis.espinal

@ luis.espinal角かっこは、2.0.4 Spring-Bootバージョンで機能しました。投稿を更新します。
Falcon

0

以下も許容されます。

@GetMapping(path = { "/{pathVariable1}/{pathVariable1}/somePath", 
                     "/fixedPath/{some-name}/{some-id}/fixed" }, 
            produces = "application/json")

同じことが@RequestMapping同様に適用できます


-2

呼び出されたURIを取得したい場合は、PathVariableアノテーションを使用することをお勧めします。

@PostMapping("/pub/{action:a|b|c}")
public JSONObject handlexxx(@PathVariable String action, @RequestBody String reqStr){
...
}

またはリクエストオブジェクトから解析します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.