Swagger文檔涵蓋了在應用程序中配置Swagger的多種不同方法。不幸的是,他們都利用web.xml,並依靠硬編碼web.xml中的api版本和基礎url如何在沒有web.xml的情況下配置Glassfish 4中的Swagger?
有沒有一種方法來配置Swagger而不使用web.xml,也沒有硬編碼api版本和基本路徑?
Swagger文檔涵蓋了在應用程序中配置Swagger的多種不同方法。不幸的是,他們都利用web.xml,並依靠硬編碼web.xml中的api版本和基礎url如何在沒有web.xml的情況下配置Glassfish 4中的Swagger?
有沒有一種方法來配置Swagger而不使用web.xml,也沒有硬編碼api版本和基本路徑?
我用下面的方法在Glassfish 4中配置Swagger而沒有資源XML。
包括由gradle這個build文件以下依賴(這方法也適用於Maven的):
編譯( 'com.wordnik:招搖-jaxrs_2.9.1:1.3.0'){ 排除組:'org.scala-lang',模塊:'scala-compiler' }
創建一個擴展javax.ws.rs.core.Application並配置ApplicationPath的類
@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);
}
}
}