如何解决带有空格的swagger-codegen和$ ref属性
我目前正在研究使用我们的swagger文件,该文件主要用于生成客户端SDK的文档。
我注意到我们的swagger文件(采用swagger 2.0 json格式)包含对这样的定义的引用:
"$ref":"#/definitions/My%20Awesome%20Object"
当我生成C#SDK时,这会转换为看起来像这样的代码:
ApiResponse<My20Awesome20Object>
从swagger文件中删除%20可以解决此问题,但与Web后端人员交谈,他们说它在那里,因为否则它将无法验证,我找不到引用,但是我记得我在swagger-codegen页面中找到了一个引用,该引用指出$ ref字段应为URI编码,因此似乎是正确的。
我目前的计划是做一个简单的脚本,只剥离%20以生成对类的正确引用。但这似乎是一个丑陋的解决方法。您是否有任何建议如何在获得正确代码的同时以符合标准的更好方式解决此问题?
干杯, 马库斯
解决方法
$ref
值are URIs。之所以有%20
是因为definitions
部分中的模式名称包含空格,如下所示:
"definitions": {
"My Awesome Object": { // <--- $ref: "#/definitions/My%20Awesome%20Object"
"type": "object",...
}
}
某些工具在处理模式名称中的非字母数字字符时遇到问题;其中包括空格< >
,« »
等。也许这就是为什么OpenAPI 3.0将有效组件名称限制为A-Z a-z 0-9 - . _
的原因。
最好的解决方法是从$ refs中删除%20
,并从definitions
部分的模式名称中删除空格。这样,如果/当您迁移到较新的OpenAPI版本时,架构名称将与OpenAPI 3.0正向兼容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。