当前位置: 首页 > news >正文

java swagger解析解决[malformed or unreadable swagger supplied]

原创不易,转载请注明出处:
https://zhangxiaofan.blog.csdn.net/article/details/141498211


如果你想看完整的 利用swagger-parser解析yaml中的api请求类型、注释、接口名,可以参考这篇文章。

【Spring/Java项目】如何利用swagger-parser解析yaml中的api请求类型、注释、接口名等等(含示例代码)-CSDN博客


今天在用swagger的包解析yaml等swagger文件的时候,遇到这类错误:

malformed or unreadable swagger supplied

maven包

        <dependency><groupId>io.swagger.parser.v3</groupId><artifactId>swagger-parser</artifactId><version>2.1.12</version></dependency>

错误信息

malformed or unreadable swagger supplied

报错代码

...SwaggerParseResult result = new OpenAPIParser().readContents(data.toString(), null, options);OpenAPI openAPI = result.getOpenAPI();Paths paths = openAPI.getPaths();
...

具体报错的地方是:

SwaggerParseResult 类,里面的 openAPI对象是null,错误信息如图所示:

 解决方案

如果我们遇到malformed or unreadable swagger supplied 这类报错,一般是我们的swagger格式有问题。

我们解析和读取swagger的yaml等文件,一把有2种方式:

方式一:直接通过文件解析:

SwaggerParseResult result = new OpenAPIParser().readLocation(filePath, null, options);

方式二:通过content内容解析

SwaggerParseResult result = new OpenAPIParser().readContents(data.toString(), null, options);

你可能用文件解析的,没有问题。但是用content内容去解析的时候,就报错了。这个时候,需要你把文件内容全部检查一遍。

例如 swagger-test1.yaml 内容如下:(看着没有问题

swagger: '2.0'
info:title: ping testversion: '1.0'
host: 'localhost'
basePath: /test
schemes:- "https"
tags:- name: TestManagedescription: 测试管理
paths:/some/ping:get:tags:- TestManageoperationId: pingGetdescription: 一个测试方法parameters:- name: iin: bodydescription: query字段required: trueschema:$ref: './swagger/swagger-reference.yaml#/type'responses:'201':description: OK

上述swagger如果用content的方式读取就会报错:malformed or unreadable swagger supplied。

因为 io.swagger.parser.v3 的包,解析的时候,会认为你的格式不对

schema:$ref: './swagger/swagger-reference.yaml#/type'

所以要换成引用的写法方式:

  schema:$ref: '#swagger/swagger-reference.yaml'

正确的格式应该是:

swagger: '2.0'
info:title: ping testversion: '1.0'
host: 'localhost'
basePath: /test
schemes:- "https"
tags:- name: TestManagedescription: 测试管理
paths:/some/ping:get:tags:- TestManageoperationId: pingGetdescription: 一个测试方法parameters:- name: iin: bodydescription: query字段required: trueschema:$ref: '#swagger/swagger-reference.yaml'responses:'201':description: OK

再运行代码就不会报错了。


http://www.mrgr.cn/news/8073.html

相关文章:

  • fl studio mobile2024最新官方版V4.6.8安卓版+iOS苹果版
  • “2025深圳电子信息展”带您感受科技创新如何改变世界
  • MySQL最左匹配原则
  • 景联文科技:专业人像采集服务,助力人像采集在多领域应用
  • HarmonyOS NEXT 地图服务中‘我的位置’功能全解析
  • 前端面试题整理-webpack
  • 每日OJ_牛客_淘宝网店(日期模拟)
  • 计算机毕业设计Flink+Hadoop广告推荐系统 广告预测 广告数据分析可视化 广告爬虫 大数据毕业设计 Spark Hive 深度学习 机器学
  • Day98:云上攻防-云原生篇K8s安全Config泄漏Etcd存储Dashboard鉴权Proxy暴露
  • 游戏引擎phaser.js3的使用之玩家和静态物理组碰撞
  • JavaScript初级——文档的加载
  • 深入理解 Go 语言并发编程底层原理
  • SSRF漏洞学习
  • MySQL主从复制之GTID模式
  • 未来已来:探索机器学习如何重塑人工智能的未来方向
  • 如何从电脑/外部硬盘驱动器/USB 驱动器/内存卡恢复数据?
  • 数学建模学习(117):四阶龙格-库塔方法从理论到Python/matlab实践
  • 安科瑞电气防火在线保护器 ASCP210系列适用于汽车充电桩
  • MATLAB 计算两点沿某个方向的间距(81)
  • java进阶学习路线