【问题标题】:can we move some swagger configuration from web.xml我们可以从 web.xml 中移动一些招摇的配置吗
【发布时间】:2013-09-04 09:42:30
【问题描述】:

在 swagger 1.2.9-1.2.3 或旧版本中,我们有配置阅读器com.wordnik.swagger.jaxrs.ConfigReader 类,我们可以扩展这个类,我们可以声明 swagger 属性 swagger.api.basepath 、 api.version 、 swagger.version 等。

但是在 swagger 2.10-1.3.0 的当前版本中,这个类不存在。有什么方法可以从 web.xml 中移动以上配置,我想将它们放在属性文件中,而不是在 web.xml 中硬编码。

提前致谢。

【问题讨论】:

    标签: swagger


    【解决方案1】:

    Swagger google group 上有一个线程解释了如何执行此操作。

    基本上,在 Swagger 1.3 中,您需要使用 SwaggerConfig 类,如下所示:

    SwaggerConfig config = new SwaggerConfig();
    config.setBasePath(yourBasePathVariable);
    ConfigFactory.setConfig(config);
    

    但是,您需要在 Swagger 加载并设置默认 basePath 之后发生这种情况,否则(如果您的 basePath 被首先设置)它将被覆盖。

    【讨论】:

      【解决方案2】:

      以下是如何将 swagger 配置移至自定义代码 如果您将微服务托管在 Cloud Foundry 或 IBM Bluemix 或某些 PaaS 云解决方案上,这将特别有用

      在你的 pom.xml 中的依赖

              <dependency>
                  <groupId>io.swagger</groupId>
                  <artifactId>swagger-jersey2-jaxrs</artifactId>
                  <version>1.5.0</version>
              </dependency>
              <dependency>
                  <groupId>javax</groupId>
                  <artifactId>javaee-api</artifactId>
                  <version>7.0</version>
                  <scope>provided</scope>
              </dependency>
      

      Swagger 配置

      package com.ibm.api;
      
      import javax.servlet.ServletConfig;
      import javax.servlet.ServletException;
      
      import io.swagger.jaxrs.config.BeanConfig;
      import io.swagger.jaxrs.config.DefaultJaxrsConfig;
      
      public class SwaggerConfigReader extends DefaultJaxrsConfig {
      
      
      
          /**
           * 
           */
          private static final long serialVersionUID = 1638783798880874518L;
      
          @Override
          public void init(ServletConfig config) throws ServletException {
      
              super.init(config);
              //contextPath will be null for host2 and /xyz for host1.
              String contextPath = config.getServletContext().getContextPath();
      
              BeanConfig beanConfig = new BeanConfig();
              beanConfig.setVersion("1.0.0");
              beanConfig.setTitle(Result.IMPLEMENTATION + " API Documentation");
              beanConfig.setSchemes(new String[] {
                      "http", "https"
              });
              beanConfig
              .setResourcePackage("com.ibm.api");
      
              beanConfig.setBasePath(contextPath + "/rest");
              beanConfig.setScan(true);
          }
      }
      

      Web.xml 条目

      <web-app id="WebApp_ID" version="2.4"
      xmlns="http://java.sun.com/xml/ns/j2ee" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
      http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
      <display-name>Restful Web Application</display-name>
      
      <servlet>
          <servlet-name>jersey-serlvet</servlet-name>
          <servlet-class>
                       com.sun.jersey.spi.container.servlet.ServletContainer
                  </servlet-class>
          <init-param>
               <param-name>com.sun.jersey.config.property.packages</param-name>
               <param-value>io.swagger.jaxrs.listing,com.ibm.api</param-value>
          </init-param>
          <init-param>
              <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
              <param-value>true</param-value>
          </init-param>
          <load-on-startup>1</load-on-startup>
      </servlet>
      
      <servlet-mapping>
          <servlet-name>jersey-serlvet</servlet-name>
          <url-pattern>/rest/*</url-pattern>
      </servlet-mapping>
      
      <servlet>
          <servlet-name>SwaggerBootstrap</servlet-name>
          <servlet-class>com.ibm.api.SwaggerConfigReader</servlet-class>
          <init-param>            
              <param-name>scan.all.resources</param-name>
              <param-value>true</param-value>
          </init-param>
          <load-on-startup>2</load-on-startup>
      </servlet>
      </web-app>
      

      注意 com.ibm.api.SwaggerConfigReader 注册为 swagger 配置和 com.ibm.api 注册在要扫描其余 API 的包中。另请注意beanConfig.setBasePath(contextPath + "/rest");

      现在您的 swagger.JSON 配置将显示为 http://localhost:8080/jax_rs/rest/swagger.json。将 swagger UI 指向此 URL,您将看到 swagger 文档。

      代码在这里:https://github.com/sanketsw/jax_rs_REST_Example

      【讨论】:

      • 升级到 swagger-jersey2-jaxrs 1.5.7 后,我的项目因未知原因损坏(swagger.json 中没有 basePath)
      猜你喜欢
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 2019-01-10
      • 1970-01-01
      • 2019-04-01
      • 2014-02-12
      • 2018-07-16
      • 2019-01-12
      相关资源
      最近更新 更多