9

Tomcat で実行されている Web アプリケーションがあり、Spring MVC を使用してコントローラーとマッピングを定義しています。私は次のクラスを持っています:

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

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

このコントローラーと「.../test」パスを、どこかで定義されたプロパティ (ファイルなど) に従って利用できるようにしたいと考えています。プロパティが false の場合、アプリはそのパスが存在しないかのように動作し、true の場合は正常に動作するようにします。これどうやってするの?ありがとう。

4

2 に答える 2

15

Spring 3.1+ を使用している場合は、テスト プロファイルでのみコントローラーを使用できるようにします。

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

次に、Tomcat の起動時に次のシステム プロパティを渡すなどして、そのプロファイルを有効にします。

-Dspring.profiles.active=test

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

于 2013-06-13T05:53:28.323 に答える
5

それを行う別の方法は、より簡単な方法かもしれませんが、RestController/Controller で@ConditionalOnPropertyアノテーションを使用することです。

    @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
        }
}

ここで、yml プロパティの testcontroller.enabled プロパティは、true に設定されていない場合、TestController Bean は作成されません。

ヒント: デフォルトで @ResponseBody が追加されているため、 Controller の代わりに RestController を使用することをお勧めします。@ConditionalOnExpression を使用して同じソリューションに到達できますが、SpEL 評価のために少し遅くなります。

于 2016-06-28T18:49:04.713 に答える