gpt4 book ai didi

Swagger 在 REST API 中识别罕见的端点

转载 作者:行者123 更新时间:2023-12-03 23:50:39 24 4
gpt4 key购买 nike

几天前,我在 JavaEE 7 中启动了 REST API,我实现了一个包含三个方法的类,并在项目中成功实现了 Swagger 和 Swagger-UI,它显示了我在生成的 JSON 中成功实现的三个端点。

但是,我迁移到了 JavaEE 8,在此更改之后,Swagger 检测到几个未知端点,例如“默认”端点(此捕获仅显示了其中的一部分):

Some endpoints

调查了一下,我发现这些端点可能属于 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 扫描器引擎扫描整个项目,忽略类和他的方法是否有 @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 ,然后应该以与用于指定包的样式相同的样式指定整个包和类。老实说,这个属性对我的问题没有影响。
解决方案来自设置 readAllResourcesfalse .原因在这里,在注释中: https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Annotations#operation

Blockquote Note: swagger-jaxrs2 reader engine includes by default also methods of scanned resources which are not annotated with @Operation, as long as a jax-rs @Path is defined at class and/or method level, together with the http method annotation (@GET, @POST, etc).



我希望这个解决方案适用于任何人,如果他/她必须面对同样的问题。

关于Swagger 在 REST API 中识别罕见的端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58555055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com