Swagger标识REST API中的稀有端点

问题描述 投票:1回答:1

几天前,我在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忽略这些端点?谢谢

swagger eclipselink openapi java-ee-8
1个回答
0
投票
最后我找到了解决方案。情况是Swagger扫描器引擎扫描了整个项目,而忽略了类及其方法是否具有@Operation。如果我的假设是正确的,则某些Eclipselink类可能具有Swagger注释(我不确定),因此在Swagger扫描时,是否找到它们并将其添加到JSON / YAML中。解决方案是创建/添加到现有的openapi.yaml(它可以具有多个名称,并且可以位于多个位置,如此处列举的https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-configuration#known-locations):

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#operation

Blockquote注意:默认情况下,只要在类和/或方法级别定义了jax-rs @Path,则swagger-jaxrs2阅读器引擎还默认包含未用@Operation注释的扫描资源的方法,以及http方法注释(@ GET,@ POST等)。

我希望这种解决方案对任何必须面对相同问题的人都有用。

© www.soinside.com 2019 - 2024. All rights reserved.