如何在没有网络的情况下在 Glassfish 4 中配置 Swagger.xml



Swagger 文档介绍了在应用程序中配置 Swagger 的多种不同方法。不幸的是,它们都利用 web.xml 并依赖于在 Web 中对 api 版本和基本 url 进行硬编码.xml

有没有办法在不使用 Web 的情况下配置 Swagger.xml也不对 api 版本和基本路径进行硬编码?

我使用以下方法在没有资源XML的情况下在Glassfish 4中配置Swagger。

  1. 在 gradle 构建文件中包含以下依赖项(此方法也适用于 Maven):

    编译 ('com.wordnik:swagger-jaxrs_2.9.1:1.3.0') { 排除组:"org.scala-lang",模块:"scala-compiler"}

  2. 创建一个扩展javax.ws.rs.core.Application的类并配置应用程序路径,例如

    @ApplicationPath("资源")公共类 RESTConfig 扩展应用程序 {}

2a. 创建一个扩展 com.wordnik.swagger.jaxrs.config.DefaultJaxrsConfig 的类,并按如下方式进行注释:

@WebServlet(name = "SwaagerJaxrsConfig" initParams = {@WebInitParam(name="api.version",  value="0.1.0"), @WebInitParam(name="swagger.api.basepath", value="http://localhost:8080/resources"})}, loadOnStartup = 2) 
public class SwaagerJaxrsConfig  extends DefaultJaxrsConfig{}

此方法的缺点是应用的 API 版本和基本 URL 在注释中硬编码。为了解决这个问题,我使用了以下方法而不是上面的方法

2b. 创建一个扩展 HttpServlet 并执行由 DefaultJaxrsConfig 完成的引导的类,例如

@WebServlet(name = "SwaggerJaxrsConfig", loadOnStartup = 2)
public class SwaggerJaxrsConfig extends HttpServlet {
private Logger log = Logger.getLogger(SwaggerJaxrsConfig.class);
@Inject Version version;
@Override public void init(ServletConfig servletConfig) {
    try {
        super.init(servletConfig);
        SwaggerConfig swaggerConfig = new SwaggerConfig();
        ConfigFactory.setConfig(swaggerConfig);
        swaggerConfig.setBasePath("http://localhost:8080/resources"); //TODO look up app path
        swaggerConfig.setApiVersion(version.getVersion());
        ScannerFactory.setScanner(new DefaultJaxrsScanner());
        ClassReaders.setReader(new DefaultJaxrsApiReader());
    } catch (Exception e) {
        log.error("Failed to configure swagger", e);
    }
  }
} 

相关内容

  • 没有找到相关文章

最新更新