几天前,我在JavaEE 7中启动了REST API,我用三种方法实现了一个类,并在项目中成功实现了Swagger和Swagger-UI,它显示了我在生成的JSON中成功实现了三个端点。
但是,我迁移到JavaEE 8,在此更改之后,Swagger检测到多个未知端点,例如“默认”端点(此捕获仅显示所有端点的一部分):
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS8xNzNkSS5wbmcifQ==” alt =“某些终结点”>
调查一下,我发现这些端点可能属于Eclipselink实现中的JPA REST API,如此处https://oracle-base.com/articles/misc/oracle-rest-data-services-ords-open-api-swagger-support和此处https://www.eclipse.org/eclipselink/documentation/2.4/solutions/restful_jpa004.htm#CHDFCFFA所述尽管它们出现在生成的JSON中,但是它们都包含变量路径,因此我无法按照Swagger给定的路径访问它们,即使使用上述示例中的Web发明了诸如“版本”之类的一些参数。
我使用的Swagger版本是v3,又名OpenAPI版本。我在端点类中使用@OpenAPIDefinition
指定OpenAPI属性,该属性还包含将它们分组的@Tag
批注,并且这三种方法都包含带有自己的@Operation
的@ApiResponse
标记。我没有其他的Swagger / OpenAPI注释/文件/类。
问题是,如何使Swagger忽略这些端点?谢谢
resourceClasses:
- com.path.to.your.package.Resource
prettyPrint: true
cacheTTL: 0
scannerClass: io.swagger.v3.jaxrs2.integration.JaxrsAnnotationScanner
readAllResources: false
而不是resourceClasses
,可以写为resourcePackages
,然后应使用与指定包相同的样式指定整个包和类。老实说,此属性不会影响我的问题。解决方法是将readAllResources
设置为false
。原因在这里,在注释中:https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Annotations#operationBlockquote注意:默认情况下,只要在类和/或方法级别定义了jax-rs @Path,则swagger-jaxrs2阅读器引擎还默认包含未用@Operation注释的扫描资源的方法,以及http方法注释(@ GET,@ POST等)。我希望这种解决方案对任何必须面对相同问题的人都有用。