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

时间:2013-10-29 17:13:50

标签: jax-rs glassfish-4 swagger

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

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

1 个答案:

答案 0 :(得分:8)

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

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

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

  2. 创建一个扩展javax.ws.rs.core.Application的类并配置ApplicationPath,例如。

    @ApplicationPath( “资源”) 公共类RESTConfig扩展了Application {}

  3. 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);
        }
      }
    }