当前位置: 首页 > 知识库问答 >
问题:

Swagger在REST API中识别稀有endpoint

郭修平
2023-03-14

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

但是,我迁移到JavaEE8,在此更改之后,Swagger检测到几个未知endpoint,比如“默认”endpoint(此捕获只显示了其中的一部分):

通过研究,我发现这些endpoint可能属于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发明一些参数,如“version”。

我使用的大摇大摆的版本是v3,也就是OpenAPI版本。我在endpoint类中使用@OpenAPIDefinition指定OpenAPI属性,该类还包含一个@tag批注来对它们进行分组,并且这三个方法包含@operation标记以及它们自己的@APIresponse。不再有我写的大摇大摆/OpenAPI注释/文件/类。

问题是,忽略这些endpoint,我怎么能大摇大摆呢?谢谢

共有1个答案

危斯伯
2023-03-14

我终于找到了解决办法。情况是,Swagger扫描器引擎扫描整个项目,忽略类和他的方法是否有@operation。如果我的假设是真的,一些Eclipselink类可能有Swagger注释(我不确定),所以当Swagger扫描时,If找到它们并将它们添加到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注意:swagger-jaxrs2阅读器引擎默认情况下还包括未使用@operation注释的已扫描资源的方法,只要在类和/或方法级别定义了jax-rs@path,以及http方法注释(@get、@post等)。

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

 类似资料:
  • 我对整个APEX服务插件是一个新手,但我想知道Salesforce是否对我在APEX服务平台中创建的REST API的Swagger或任何类似的REST描述语言提供了本地支持? 例如: 我希望能够返回swagger json,一个WADL文档,或者这个REST服务(以及我在里面的所有其他REST服务)的东西。有没有人知道我能做到这一点的方法? 提前道谢!

  • Swagger UI和Swagger CodeGen有什么区别? 我阅读了中的描述https://swagger.io/tools/.听起来Swagger Editor、UI和codeGen是完全不同的工具。如果我想生成.Net服务器存根并将其可视化,这是否意味着我需要同时使用UI和CodeGen?

  • 我有一个麻烦与Springfox昂首阔步2为我的API留档。它无法识别我的Rest存储库(JpaRepository/PagingAndSortingRepository)。 甚至我也尝试添加下面这样的招摇注释,但没有成功 而HAL浏览器可以识别我的Rest存储库。有人能帮我吗?这是我对pom的依赖, 这是我的靴子课, 当我添加时,在应用程序启动时出现以下错误

  • 问题内容: 每天,我们都会收到来自不同供应商的不同格式(CSV,XML,自定义)的巨大文件,需要将其上传到数据库中进行进一步处理。 问题在于这些供应商将发送其数据的完整转储,而不仅仅是更新。在某些应用程序中,我们仅需要发送更新(即,仅更改记录)。当前,我们要做的是将数据加载到临时表中,然后将其与以前的数据进行比较。这非常缓慢,因为数据集非常庞大,而且我们有时会缺少SLA。 有没有更快的方法来解决此

  • 我已经完成了npm安装netlify-cli-g,这是成功安装。我得到以下回应: 已弃用的core-js@2.6.11:core-js@ netlify-cli@2.36.0安装后C:\Users\soyebp\AppData\Roaming\npm\node\u modules\netlify cli节点/脚本/后安装。js 成功!Netlify CLI已安装! 您的设备现在配置为使用Netli

  • 不,我说的不是时区偏移,而是根据夏令时等因素,一个地区的时区偏移在一年中可能会有所不同。我说的是IANA保持的实际时区。我知道ISO 8601不支持这些,对吗? 平台正在采取哪些措施来支持在类似 ISO 8601 的字符串表示中标识时区?我注意到最新的Java日期/时间库为此使用了扩展的ISO 8601格式,例如。(请参见日期时间格式化程序 API。 是否有一些融合的约定(例如与其他语言和平台)来