2012-02-09 12 views
9

Spring MVC 3では、urlパラメータの値に応じて、2つの異なるコントローラクラスで同じURLを処理したいと考えています。 注釈を@RequestMappingすることさえ、このようなフィールドがあります。のparamsを、と私は、次の2つの異なるマッピング(私はクラスレベルのマッピングを使用する)だろうと思った:パラメータ値によるSpring MVC要求マッピングの分割方法

@RequestMapping(value = "/myurl", params = "name=val1") 

@RequestMapping(value = "/myurl", params = "name=val2") 

が、それはありません。 /myurlのコントローラが既にマップされている(最初のケースでは)2番目のケースの場合、Springは例外をスローします。

パラメータごとにリクエストマッピングを分割するための正確な解決法はありますか? @RequestMappingを拡張したり、コントローラとしてプロキシを使用したり、パラメータに応じて異なるコントローラを呼び出すことができます。 考えていますか?

UPDATE これが唯一の方法のレベルではなく、クラスのレベルではなく動作します... この意志:

@Controller 
@RequestMapping(value = "/myurl") 
public class Class123 { 

    @RequestMapping(value = {"edit.htm"}, params = "src=1") 
    public String open1(Map<String, Object> map) throws Exception {....} 

    @RequestMapping(value = {"edit.htm"}, params = "src=2") 
    public String open2(Map<String, Object> map) throws Exception {....} 
} 

これはしません:

@Controller 
@RequestMapping(value = "/myurl", params = "src=1") 
public class Class123_1 { 

    @RequestMapping(value = {"edit.htm"}) 
    public String open(Map<String, Object> map) throws Exception {....} 
} 


@Controller 
@RequestMapping(value = "/myurl", params = "src=2") 
public class Class123_2 { 

    @RequestMapping(value = {"edit.htm"}) 
    public String open(Map<String, Object> map) throws Exception {....} 
} 

そして、私は希望異なるクラスのロジックを分割する。

+1

これはうまくいくはずです。私はそれを使用した、それは動作します。あなたが私たちを見せてくれなかったことが何か起こっています。他のコントローラがそのURLをマップしている可能性があります。 – skaffman

+0

+1詳しい情報がありますか? –

+1

ええ、これは同じクラスのメソッドに対してのみ有効かもしれません。それはバグかどうかは分かりませんが、ドキュメンテーションには言及していませんが。おそらく、あなたはあるクラスのメソッドを保持することができますが、実装を別々に保つために別のクラスに委譲しますか? – skaffman

答えて

1

RequestMappingHandlerMapping(Spring 3.1の新機能)とDefaultAnnotationHandlerMapping(RequestMappingHandlerMappingで置き換えられたクラス)を使用することの違いのようです。

関連する問題