私のSpring Web MVCコントローラーメソッドは、URIパスの一部としてIDを渡すリクエストによって一致する必要があることを表現する方法はありますか?.
@RequestMapping(method=RequestMethod.GET, value="campaigns/{id}")
public String getCampaignDetails(Model model, @PathVariable("id") Long id) {
...または、クライアントがスタイルのHTTP要求パラメーターとしてIDを送信する場合...
@RequestMapping(method=RequestMethod.GET, value="campaigns")
public String getCampaignDetails(Model model, @RequestParam("id") Long id) {
これは、重複したコードを追加したくないという非常に一般的な実世界のURLスキームのように思えますが、まだ答えを見つけることができませんでした。アドバイスは大歓迎です。
編集:現在(Spring MVC <= 3.0)であるように思われます。ハビの答えの中。
同じ関数のマッピングURLと設定IDの両方をオプションとして設定できます。
@RequestMapping(method=RequestMethod.GET, value={"/campaigns","/campaigns/{id}"})
public String getCampaignDetails(Model model,
@RequestParam(value="id", required=false) Long id,
@PathVariable("id") Long id2)
{
}
ただし、idが送信されない場合にもマップされますが、メソッド内でこれを制御できます。
[〜#〜] edit [〜#〜]:前のソリューションは、@PathVariable
がない場合、null
に設定されません{null}
およびURLをマップできません(ngeekに感謝)。その場合、唯一の解決策は、それぞれが@MappingRequest
およびそれらの1つの内部で他の関数を呼び出すか、他のURLにリダイレクトします(リダイレクト:または転送:Springプレフィックス)。私はこの解決策があなたが探しているものではないことを知っていますが、それはあなたができる最善のものだと思います。実際、コードを複製するのではなく、別のURLを処理する別の関数を作成しています。
それでもPathVariableアプローチに固執したい場合、および構文的に誤ったエラーが400個発生する場合は、このアプローチに従ってください。
@RequestMapping(method=RequestMethod.GET, value={"campaigns/{id}","campaigns"})
public String getCampaignDetails(Model model,
@PathVariable Map<String, String> pathVariables)
{
System.out.println(pathVariables.get("id"));
}
@RequestMapping
注釈は、path
またはname
の代わりにvalue
属性の設定をサポートするようになりました。 path
を使用すると、この質問に必要なマッピングを実現できます。
@RequestMapping(method=RequestMethod.GET, path="campaigns/{id}")
public String getCampaignDetails(Model model, @PathVariable("id") Long id) {
@RequestMapping(method=RequestMethod.GET, value="campaigns")
public String getCampaignDetails(Model model, @RequestParam("id") Long id) {