代码之家  ›  专栏  ›  技术社区  ›  Abhinandan

初始化没有web的swagger。xml在生产中禁用它

  •  0
  • Abhinandan  · 技术社区  · 7 年前

    将API与swagger UI一起使用。

    我从网上得知,我们可以通过@profile注释来实现这一点。但我经历过,如果我们在网上注册任何课程。xml,即使您在该类级别上使用@Profile,它也不会像将在上下文加载时加载的类那样工作。

    我的项目中有静态内容,比如swagger-ui-min。js,大摇大摆的用户界面。js,索引。html等来加载招摇。

    2 回复  |  直到 7 年前
        1
  •  0
  •   Julien Kronegg    7 年前

    您可以有一个标志,仅当您不在生产环境中时才允许加载Swagger Servlet(此处为Swagger 2):

    import javax.ws.rs.ApplicationPath;
    import javax.ws.rs.core.Application;
    import java.util.HashSet;
    import java.util.Set;
    import io.swagger.jaxrs2.integration.resources.OpenApiResource;
    
    @ApplicationPath("") // no application path after the context root
    public class MyApp extends Application {
        @Override
        public Set<Class<?>> getClasses() {
            Set<Class<?>> classes = new HashSet<>();
            classes.add(...); // your main service
            if (notInProduction) { // a flag telling that you are not in production
                classes.add(OpenApiResource.class);
            }
            return classes;
        }
    }
    
        2
  •  0
  •   Abhinandan    6 年前

    下面的代码适用于我。

    String enable_swagger_ui = System.getenv("ENABLE_SWAGGER_UI");
     if( enable_swagger_ui != null && enable_swagger_ui.equalsIgnoreCase("true"))
                packages("io.swagger.jaxrs.listing");