在DropWizard中禁用Swagger捆绑包

时间:2018-09-19 13:44:32

标签: java rest swagger dropwizard

我希望基于配置值在生产环境中禁用swagger功能/端点。

我将如何处理?

我相信实现此目标的最佳方法是,在DropWizard应用程序首次启动时,在执行initialize方法的过程中不要添加捆绑包。

此解决方案的问题在于,您无法访问从YAML / YML文件中的值填充的配置get方法。当应用程序进入run方法时,这些值可用。

这是我从应用程序类初始化的方法

@Override
public void initialize(Bootstrap<Configuration> bootstrap) {
    LOGGER.debug("initialize");
    bootstrap.setConfigurationSourceProvider(new SubstitutingSourceProvider(bootstrap.getConfigurationSourceProvider(),
            new EnvironmentVariableSubstitutor(false)));

    bootstrap.addBundle(new SwaggerBundle<Configuration>() {
        @Override
        protected SwaggerBundleConfiguration getSwaggerBundleConfiguration(Configuration configuration) {
            return configuration.swaggerBundleConfiguration;
        }
    });
}

如果我需要澄清更多信息,请告诉我。

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以在生产环境中设置环境变量,并使用它来决定是否包括SwaggerBundle。例如:

if (!"prod".equalsIgnoreCase(System.getenv("ENVIRONMENT"))) {
  bootstrap.addBundle(new SwaggerBundle<Configuration>() { ... }
}

答案 1 :(得分:0)

我当时使用的是DropWizard的旧版本。

更新后,提供了新的方法,包括 setIsEnabled()

这是为解决此问题而添加的。

bootstrap.addBundle(new SwaggerBundle<Configuration>() {
        @Override
        protected SwaggerBundleConfiguration getSwaggerBundleConfiguration(Configuration configuration) {
            if(!configuration.getSwaggerEnabled()){
                configuration.swaggerBundleConfiguration.setIsEnabled(false);
            }
            return configuration.swaggerBundleConfiguration;
        }
    });
}

谢谢