我试图在我的应用程序中添加招摇 .
但我将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 .
根据我的理解,swagger文件应该在以下链接http://localhost/api/api-docs/swagger.json
更新:
将BasePath更改为resources / 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)
2 回答
因此资源路径将是基础
@ApplicationPath("/resources/api")
和swagger资源路径/swagger.json
. 所以你需要访问/resources/api/swagger.json
.BeanConfig
中修复基本路径 . 此基本路径用于为swagger UI创建URL . 使用基本路径"/api"
表示URL数据将导致UI访问/api/yourresource
,其中没有't exist. The base path should be a combination of the servlet context (which I'在您的情况下猜测为无)和 Jersey 基本路径(即/resources/api
) . 所以设置BeanConfig
基本路径为"/resources/api"
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 my.rest.resources.apps.ApiApplication的io.swagger.jaxrs.config.BeanConfig.setScan(BeanConfig.java:168) . ( ApiApplication.java:34)at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
通过上面的堆栈跟踪,它被观察如下:
实际上你正在使用Jersey1.x支持的jar,即reflection-0.9.9-RC1.jar,所以将Jersey 2.x支持的jar reflection-0.9.9.jar添加到你的libs文件夹或类路径中 . 这将解决上述问题