Java Swagger Core Jersey 2.X搭配ResourceConfig

Java Swagger Core Jersey 2.X搭配ResourceConfig,java,jersey-2.0,swagger-2.0,Java,Jersey 2.0,Swagger 2.0,我正试图在我的应用程序中添加招摇 我遵循这个指南 但我已将Jersey配置为ResourceConfig,如下所示: @ApplicationPath("/resources/api") public class ApiApplication extends ResourceConfig { public ApiApplication() { super(MultiPartFeature.class); packages("my.res

我正试图在我的应用程序中添加招摇

我遵循这个指南

但我已将Jersey配置为ResourceConfig,如下所示:

    @ApplicationPath("/resources/api")
     public class ApiApplication extends ResourceConfig {

    public ApiApplication() {
        super(MultiPartFeature.class);
        packages("my.rest.resources");
        register(io.swagger.jaxrs.listing.ApiListingResource.class);
        register(io.swagger.jaxrs.listing.SwaggerSerializers.class);

        BeanConfig beanConfig = new BeanConfig();
        beanConfig.setVersion("1.0.2");
        beanConfig.setSchemes(new String[]{"http"});
        beanConfig.setHost("localhost:8080");
        beanConfig.setBasePath("/resources/api");
        beanConfig.setResourcePackage("my.rest.resources");
        beanConfig.setScan(true);
    }
  }
这是正确的吗

没有生成swagger.json

据我了解,大摇大摆的文件应该在以下链接

更新: 已更改资源/api的基本路径

我在tomcat日志中还得到以下异常:

    SEVERE: Servlet /XXXXXX threw load() exception
java.lang.NoSuchMethodError: org.reflections.util.ClasspathHelper.forPackage(Ljava/lang/String;[Ljava/lang/ClassLoader;)Ljava/util/Collection;
    at io.swagger.jaxrs.config.BeanConfig.classes(BeanConfig.java:189)
    at io.swagger.jaxrs.config.BeanConfig.setScan(BeanConfig.java:168)
    at my.rest.resources.apps.ApiApplication.<init>(ApiApplication.java:34)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
严重:Servlet/XXXXXX引发load()异常
java.lang.NoSuchMethodError:org.reflections.util.ClasspathHelper.forPackage(Ljava/lang/String;[Ljava/lang/ClassLoader;)Ljava/util/Collection;
位于io.swagger.jaxrs.config.BeanConfig.classes(BeanConfig.java:189)
在io.swagger.jaxrs.config.BeanConfig.setScan(BeanConfig.java:168)
在my.rest.resources.apps.ApiApplication.(ApiApplication.java:34)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  • (招摇过市数据的来源)只不过是另一个JAX-RS(Jersey)资源类

    @Path("/")
    public class ApiListingResource {
        ...
        @GET
        ...
        @Path("/swagger.{type:json|yaml}")
        public Response getListing(..) {...}
        ...
    }
    
    因此,资源路径将是基本
    @ApplicationPath(“/resources/api”)
    和swagger资源路径
    /swagger.json
    。因此您需要访问
    /resources/api/swagger.json

  • 您需要在
    BeanConfig
    中修复基本路径。此基本路径用于为swagger UI创建URL。使用基本路径
    “/api”
    意味着URL数据将导致UI访问不存在的
    /api/yourresource
    。基本路径应该是servlet上下文的组合(我猜在你的例子中是none)和Jersey基本路径(即
    /resources/api
    )。因此将
    BeanConfig
    基本路径设置为
    “/resources/api”


  • java.lang.NoSuchMethodError:org.reflections.util.ClasspathHelper.forPackage(Ljava/lang/String;[Ljava/lang/ClassLoader;)Ljava/util/Collection; 位于io.swagger.jaxrs.config.BeanConfig.classes(BeanConfig.java:189) 在io.swagger.jaxrs.config.BeanConfig.setScan(BeanConfig.java:168) 在my.rest.resources.apps.ApiApplication.(ApiApplication.java:34) 位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)

    通过上述stacktrace,可以观察到如下情况:


    实际上,您正在使用Jersey 1.x支持的jar,即reflections-0.9.9-RC1.jar,因此将Jersey 2.x支持的jar reflections-0.9.9.jar添加到您的libs文件夹或类路径中。这将解决上述问题

    显示您的依赖项。这可能是一个依赖项问题看起来您的org.reflections依赖项版本错误。我建议您可以使用某种依赖项管理实用程序来获取依赖项的正确版本,例如maven。我使用的是maven,我只包含了出乎意料的swagger-jersey2-jaxrs 1.5.0。您可以尝试运行mvn dependency:tree,看看是否有与org.reflections:reflections相关的任何冲突版本。我只有反射0.9.9作为编译依赖项列在我的项目中。那么好吧。如果你没有在tomcat的lib文件夹中添加其他版本,那么我就没有主意了。