【问题标题】:Disabling Swagger Bundle in DropWizard在 DropWizard 中禁用 Swagger Bundle
【发布时间】:2018-09-19 13:44:31
【问题描述】:

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

我该怎么做呢?

我认为实现这一点的最佳方法是在 DropWizard 应用程序首次启动时执行初始化方法期间不要添加捆绑包。

此解决方案的问题是您无法访问从 YAML/YML 文件中的值填充的配置获取方法。这些值在我们应用程序进入 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;
        }
    });
}

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

提前致谢。

【问题讨论】:

    标签: java rest swagger dropwizard


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      更新后,有新的方法可用,包括setIsEnabled()

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

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

      谢谢,

      【讨论】: