2013-06-15 12 views
6

私たちのアプリケーションのソースを調べると、設定のキーと値を複数回コピーして貼り付ける共通のSpring MVCコントローラが見つかりました。 RequestMappingの値を除いて、クラス定義はまったく同じです。アプリケーションごとに異なるURLでこのページを使用できるようにするためです。SpringMVCコントローラでのRequestMappingのオーバーライド

このコントローラーを共通ライブラリーに移動して、デフォルトのRequestMapping値を提供したいとします。

@Controller 
@RequestMapping (value="/property") 
public class CommonPropertyController { 
    .... 
} 

独自のURLパターンを使用する場合、各アプリケーションはどのようにこの値を上書きしますか?

答えて

11

ソースコードを見ると、マニュアル(プレアノテーション)ハンドラ定義(必要なものを実装する方法でもあります)に戻らずに、どうやってやるのかというアイデアがありました。

Springでは、プロパティプレースホルダのコンフィグレータを@RequestMappingの値で使用できます。だから、その事実を使用するなど@RequestMapping定義することが可能である。そして、あなたは、単にあなたのアプリケーションのコンテキスト内で右性質を持つPropertySourcesPlaceholderConfigurerを定義することができ

@Controller 
@RequestMapping("${routing.property.path}") 
public class CommonPropertyController { 
    .... 
} 

を、あなたが行ってもいいです。あなたはプロパティがspeciefiedされていない場合にフォールバックマッピングしたい場合にも、プロパティのプレースホルダを使用してデフォルト値を指定することができます


UPDATE:

@RequestMapping("${routing.property.path:/property}") 
+0

うわー、これは素晴らしいです! – ltfishie

+0

これは、プロパティが存在しない場合にコントローラを無効にするという特別な利点があります。正確に私が探しているもの。 – ltfishie

+0

この方法でコントローラを無効にすることができるかどうかはわかりません。それはプレースホルダー自体にマップされるか、未解決のプロパティーに関するエラーが発生する可能性があります... Btw。私はまた、プレースホルダーの振る舞いが '@ RequestMapping' JavaDocに記載されていることにも気付きました:) –

関連する問題