2013-06-13 22 views
6

WebアプリケーションがTomcatで動作し、Spring MVCを使用してコントローラとマッピングを定義しています。Spring MVC Webアプリケーション - コントローラのプロパティの有効化/無効化

@Controller("api.test") 
public class TestController { 

     @RequestMapping(value = "/test", method = RequestMethod.GET) 
     public @ResponseBody String test(HttpServletRequest httpRequest, HttpServletResponse httpResponse) { 
      // body 
     } 
} 

私はどこかで定義されたプロパティ(例えばファイル)によると、このコントローラおよび「... /テスト」パスが利用できるようにしたいと思います:私は、以下のクラスを持っています。プロパティがfalseなら、アプリケーションはそのパスが存在しないかのように動作し、それが真であれば正常に動作するようにします。これどうやってするの?ありがとう。

答えて

12

あなたは春3.1以上を使用している場合は、唯一のテストプロファイルで使用可能なコントローラーます

@Profile("test") 
class TestController { 
    ... 
} 

はその後、例えばによって、そのプロファイルを有効にしますTomcatのブート時に次のシステムプロパティを渡します。

-Dspring.profiles.active=test 

コントローラを無効にするには、単に与えられたプロファイルを省略します。

+0

はい、これは正常に動作します。ありがとう。 –

2

もう1つの方法は、それを行う簡単な方法ですが、@ConditionalOnProperty注釈をRestController/Controllerで使用することです。あなたYMLで

@RestController("api.test") 
    @ConditionalOnProperty(name = "testcontroller.enabled", havingValue = "true") 
public class TestController { 

     @RequestMapping(value = "/test", method = RequestMethod.GET) 
     public String test(HttpServletRequest httpRequest, HttpServletResponse httpResponse) { 
      // body 
     } 
} 

ここtestcontroller.enabledプロパティプロパティがtrueに設定されていない場合は、TestControllerビーンが作成されることはありません、と言います。

ヒント:コントローラの代わりにRestControllerを使用することをお勧めします。デフォルトで@ResponseBodyが追加されています。 @ConditionalOnExpressionを使用して同じ解決策に到達することはできますが、SpELの評価により少し遅くなります。