首页 文章

Swagger没有生成REST文档

提问于
浏览
5

我试图让Swagger自动生成我的REST API文档,但我只得到部分结果 .

我正在使用Resteasy . 我添加了Maven Swagger依赖项

<dependency>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-jaxrs</artifactId>
    <version>1.5.3</version>
</dependency>

然后我配置了我的Application对象

package com.myapp.init;


import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

import io.swagger.jaxrs.config.BeanConfig;
import io.swagger.jaxrs.listing.ApiListingResource;
import io.swagger.jaxrs.listing.SwaggerSerializers;


@ApplicationPath("/rest")
public class WebappInit extends Application {

    public WebappInit() {
        BeanConfig beanConfig = new BeanConfig();
        beanConfig.setVersion("1.0.0");
        beanConfig.setSchemes(new String[]{"http"});
        beanConfig.setHost("theIP:8080");
        beanConfig.setBasePath("/myapp/rest/");
        beanConfig.setResourcePackage("the.resource.package");
        beanConfig.setScan(true);
        beanConfig.setPrettyPrint(true);

    }


    public Set<Class<?>> getClasses() {
        Set<Class<?>> s = new HashSet<Class<?>>();


        // here I add my REST WSs
        s.add(ApiListingResource.class);
        s.add(SwaggerSerializers.class);


        return s;
    }

}

然后我运行Web应用程序(在Wildfly 9服务器上)并转到URL http://localhost:8080/myapp/rest/swagger.json . 这就是我得到的

{
  swagger: "2.0",
  info: {
    version: "1.0.0"
  },
  host: "10.17.36.215:8080",
  basePath: "/devops/rest/",
  schemes: [
    "http"
  ]
}

似乎Swagger无法构建REST文档,即使我的REST endpoints 可以访问并添加到Swagger资源列表中 .

可能是什么问题?

谢谢

朱利奥

更新:我在Swagger init方法中检查了 BeanConfig.classes() 我的REST类是否被正确发现 .

3 回答

  • 5

    您需要在资源类中添加@Api注释 .

    例如:

    package my.sample;
    import io.swagger.annotations.Api;
    import javax.ws.rs.Path;
    import javax.ws.rs.GET;
    import javax.ws.rs.core.Response;
    
    @Api
    @Path ("/mypath")
    public class MyResource
    {
        @GET
        public Response myEndpoint()
        {
            return Response.ok ();
        }
    }
    
  • 0

    我想我遇到了你的问题 . 您的根服务扩展 Application ,允许动态构建资源层次结构 . 我相信swagger甚至不能支持这种技术,因为它在编译时生成元数据(json文件) .

    我总是使用基于注释的REST服务,即每个资源都使用适当的 @Path 注释进行注释 . 框架自动初始化所有资源,因此我不必从 Application 扩展我的根资源并实现 getClasses() . 在这种情况下,通过分析J87RS注释,例如 @Path@PathParam@GET@POST 等,swagger可以在编译时提取所有资源并生成json文件 .

  • 0

    您必须将@App注释添加到资源类并在setResourcePackage方法中加载资源包 . 它应该做的魔术 .

相关问题