代码之家  ›  专栏  ›  技术社区  ›  Rubal Jain

与maven项目的Swigger ui集成不显示API

  •  0
  • Rubal Jain  · 技术社区  · 7 年前

    我有一个带有RESTAPI的现有maven项目。我正试图把招摇和这个项目结合起来。当我运行该项目时,我会得到一个空的招摇UI页面。未加载API。我哪里做错了?

    pom.xml

    <!-- Swagger -->
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-jersey2-jaxrs</artifactId>
            <version>1.5.16</version>
        </dependency>
    

    public class MyRestApplication extends ResourceConfig {
    public MyRestApplication() {
        System.out.println("Entering Custom Application");
        property(ServerProperties.BV_SEND_ERROR_IN_RESPONSE, true);    
        property(ServerProperties.
        BV_DISABLE_VALIDATE_ON_EXECUTABLE_OVERRIDE_CHECK, true);
        register(RolesAllowedDynamicFeature.class);        
        register(StorageResource.class);
        register(io.swagger.jaxrs.listing.ApiListingResource.class);
        register(io.swagger.jaxrs.listing.SwaggerSerializers.class);        
    }
    }    
    

    在我的StorageResource文件中:

    @Api(value = "/Person")
    @Path("")
    public class StorageResource {
    static Logger logger = 
    Logger.getLogger(StorageResource.class.getName());
    @PUT
    @Path("/person-manager-resource/addPerson")
    @Produces("application/json")
    @Consumes("application/json")
    @ApiOperation(
            value = "method api",
            notes = "method api notes"
    )
    public Object addPerson(String reqBody) {
        AddPerson add = new AddPerson();
        return add.addPerson(reqBody);
    }
    }
    

    在索引中。Swagger UI的html(复制自 文件夹到webapp文件夹)

    window.onload = function() {  
    // Build a system
    const ui = SwaggerUIBundle({
    url: "http://localhost:8080/demographics/dgs/swagger.json",
    dom_id: '#swagger-ui',
    presets: [
      SwaggerUIBundle.presets.apis,
      SwaggerUIStandalonePreset
    ],
    plugins: [
      SwaggerUIBundle.plugins.DownloadUrl
    ],
    layout: "StandaloneLayout"
    })
    window.ui = ui
    }
    

    <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>in.healthelife.DGS</param-value>
        </init-param>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>in.healthelife.DGS.data.MyRestApplication</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/dgs/*</url-pattern>
    </servlet-mapping>
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   harsha kumar Reddy    7 年前


    我不明白你为什么用2 org.glassfish.jersey.servlet.ServletContainer 这行不通

    通过在web.xml中提及,确保您提到的自定义应用程序是通过jersey容器加载的


    swagger-jersey2-jaxrs
    

    依赖性将足够了,其余部分将通过传递方式删除。我不知道你正在使用哪个版本的球衣,但你必须扩展 ResourceConfig Application 类本身

    您必须在扩展资源配置中注册这两个功能

    io.swagger.jaxrs.listing.ApiListingResource,
         io.swagger.jaxrs.listing.SwaggerSerializers
    

    您的自定义应用程序类必须在web中提及。像这样的xml

        <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer
       </servlet-class>
        <init-param>
          <param-name>javax.ws.rs.Application</param-name>
          <param-value>com.foo.app.CustomApplication
         </param-value>
        </init-param>
        </servlet>
    

    url: "http://localhost:8080/OpenEMPIStorage/rest/api-docs",
    

     url: "swagger.json"
    

    http://localhost:8080/OpenEMPIStorage/rest/api-docs 是在这个昂首阔步复制。json文件

    public MyRestApplication() 
    {
    
        System.out.println("Entering Custom Application");
    
        property(ServerProperties.BV_SEND_ERROR_IN_RESPONSE, true);
        // @ValidateOnExecution annotations on subclasses won't cause errors.
        property(ServerProperties.BV_DISABLE_VALIDATE_ON_EXECUTABLE_OVERRIDE_CHECK, true);
        register(RolesAllowedDynamicFeature.class);
        register(AuthenticationFilter.class);
        register(AuthenticationResponseFilter.class);
     }
    

    不要使用 @ApplicationPath

    你的傲慢。json应该在fallowing path下可用

    http://<ip address:portname or domain name >/<yourapp-path>/dgs/swagger.json