为什么Newtonsoft Schema Validator不识别OAS3可空属性?

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

我的API使用Swagger OAS3进行记录。我有一个使用YAML定义的属性:

LoanAmount:
 type: number
 nullable: true 

我可以从swagger导出的结果JSON看起来像:

  "LoanAmount": {
    "type": "number",
    "nullable": true
  },

当我使用jsonschemavalidator测试验证时,模式为:

   {
      "title": "A JSON Schema for OpenAPI 3.0.",
      "id": "http://openapis.org/v3/schema.json#",   "$schema": 
      "http://json-schema.org/",   "type": "object",
      "properties": {
      "LoanAmount": {
      "type": "number",
      "nullable": true}
       }
    }

输入为:

{
  "LoanAmount" : null
}

验证失败了

“无效的类型。预期的数字,但得到了空”

我可以使用以下方法完成这项工作:

"LoanAmount": {
"type": ["number","null"]
}

但是,我无法弄清楚如何使用OAS3 YAML以这种方式定义它。我的目标不是必须在swagger hub之外维护一个单独的模式,以满足我对API中许多字段的可空要求。

一个昂首阔步的文档page描述了OAS3“使用JSON Schema规范Wright Draft 00(又名草案5)的扩展子集来描述数据格式......”

Json.Net Schema文档说“支持100%的JSON Schema Draft 6并且与旧版本具有向后兼容性”

我的假设是OAS3可以为空的属性是扩展子集特性之一,而不是任何JSON模式草案的一部分,但我在继续之前寻找对此的确认。

json.net swagger jsonschema openapi
1个回答
0
投票

OAS3使用JSON Schema关键字的子集超集。

https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#data-types

OAS中的原始数据类型基于JSON模式规范Wright Draft 00支持的类型。请注意,也支持整数作为类型,并且定义为没有分数或指数部分的JSON数。 null不支持作为类型(对于替代解决方案,请参见nullable)。使用Schema Object定义模型,Schema Object是JSON Schema Specification Wright Draft 00的扩展子集。

确认。正在开展工作以允许在未来的OAS版本中充分使用JSON Schema!

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