Swagger 我们可以从web.xml中移动一些招摇过市的配置吗

Swagger 我们可以从web.xml中移动一些招摇过市的配置吗,swagger,Swagger,在swagger 1.2.9-1.2.3或旧版本中,我们有config readercom.wordnik.swagger.jaxrs.ConfigReader类,我们可以扩展这个类,并可以声明swagger属性swagger.api.basepath、api.version、swagger.version等 但在当前版本的swagger 2.10-1.3.0中,该类不存在。我们是否可以从web.xml中移动上述配置,我希望将它们放在属性文件中,而不是在web.xml中硬编码 提前感谢。有一个帖

在swagger 1.2.9-1.2.3或旧版本中,我们有config reader
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.3中,您需要使用SwaggerConfig类,如下所示:

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

但是,您需要在Swigger加载并设置默认基本路径后执行此操作,否则(如果先设置基本路径),它将被覆盖。

以下是如何将Swigger配置移动到自定义代码 如果您在CloudFoundry或IBMBlueMix或某些PaaS云解决方案上托管微服务,这将特别有用

pom.xml中的依赖关系 Web.xml条目

Restful Web应用程序
泽西塞尔维特酒店
com.sun.jersey.spi.container.servlet.ServletContainer
com.sun.jersey.config.property.packages
io.swagger.jaxrs.listing,com.ibm.api
com.sun.jersey.api.json.POJOMappingFeature
真的
1.
泽西塞尔维特酒店
/休息/*
招摇过市
com.ibm.api.SwaggerConfigReader
扫描所有资源
真的
2.
注意,
com.ibm.api.SwaggerConfigReader
注册为swagger配置,
com.ibm.api
注册在要扫描rest api的包中。另请注意
beanConfig.setBasePath(contextPath+“/rest”)

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


代码如下:

在升级到swagger-jersey2-jaxrs 1.5.7(swagger.json中没有basePath)后,我的项目因未知原因而中断
        <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>
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-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>