2012-03-09 17 views
0

STS 2.8.1とSpring 3.1.1.RELEASEを使用しています。Spring MVC抽象コントローラ::抽象コントローラインタフェースを実装する際に正確なメソッドシグニチャを取得する方法

私はSTSでコントローラを拡張する場合、私は@RequestMappingが細かい継承されていることを理解し、私

@Override 
public OAuthEntity setOAuthEntity(OAuthEntity oAuthEntity) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public OAuthEntity getOAuthEntity(Long id) { 
    // TODO Auto-generated method stub 
    return null; 
} 

以下のように、それは私のメソッドのシグネチャを与える

以下
public abstract class SuperController { 

@RequestMapping(value = "/Entity", method = RequestMethod.POST, headers = "Accept=application/xml,application/json") 
    public abstract @ResponseBody OAuthEntity setOAuthEntity(@RequestBody OAuthEntity oAuthEntity); 

@RequestMapping(value = "/Entity/{id}", method = RequestMethod.GET, headers = "Accept=application/xml,application/json") 
    public abstract @ResponseBody OAuthEntity getOAuthEntity(@PathVariable("id") Long id); 
} 

のような抽象コントローラを持っていますコードをテストしました(それは動作します!!)。 私が望むのは、スーパークラスを拡張すると、抽象クラスのように@ResponseBody、@PathVariable( "id")と@RequestBodyを取得する必要があるということです。もちろん

それは私を殺すが、イライラされていない

@Override 
public @ResponseBody OAuthEntity setOAuthEntity(@RequestBody OAuthEntity oAuthEntity) { 

    @Override 
public @ResponseBody OAuthEntity getOAuthEntity(@PathVariable("id") Long id) { 

以下のようなサブクラスはメソッドのシグネチャを持つように私は(それは私がやっているものだが、よりエレガントな方法をしたいと思います)を手動で編集できます手動で書き込む必要があります。 何か助けていただければ幸いです。

答えて

0

Spring 3は、コントローラ用のインタラクションという概念を廃止しました。私のアドバイスは抽象的なコントローラーのアイデアを取り除き、単純にそれらの注釈をコントローラーに追加することです。

このコンテキストで継承は意味をなさない。 1つのコントローラメソッドだけが、アプリケーション内の特定の要求マッピングを処理するようにします。私の意見では、親子関係は必要ありません。これらの注釈を適切なコントローラ実装に移動し、抽象クラスを削除することをお勧めします。

+0

複数のコントローラ間で同じメソッドシグネチャを使用したいので、親子関係にしたいと思っていました。このようにして、私はさまざまなコンテキストに対して異なる実装を行うことができます。スーパーコントローラはOauthControllerで、子供は/ google、/ facebookなどです。 – user1259352

関連する問題