我知道对此的典型反应是使用
"type":"["string", "null"]
但是我们拥有的 OpenAPI 版本是 3.0.x,而不是 3.1,因此
null
的类型不可用。我正在尝试找到一种方法让我们的 JSON 验证可以是 string
或 null
的字段
当前字段是
"type":"string",
"pattern": "...actual pattern is kind of long...",
"example": "2018-08-28",
"description": "Description of the field here.",
"nullable":true,
但这并不能验证空条目是否有效。如果我设置
"type": ["string","null"],
它确实正确地验证了它,但是在编译 swagger 文档时这显示得很奇怪,所以我试图找到一种方法来允许字符串或空值,验证它并让它正确显示。通过以上内容,它会将文档中的类型全部显示为一个单词
stringnull
。
我尝试过 JSON 模式版本
OpenAPI版本3.0.1
OAS 3.0.x 有一个
nullable
为此目的定义的属性
您使用哪个验证器?它可能没有实现此关键字,这就是您在使用它时遇到问题的原因。
您可以使用 hyperjump-io
验证它是否有效交换
data
和 data2
以尝试不同的实例。
import { validate } from "@hyperjump/json-schema/openapi-3-0"
import { fileURLToPath } from 'url';
import { dirname } from 'path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
let data = {
"port": null
}
let data2 = {
"port": "test"
}
try {
let valid = await validate(`file://${__dirname}/test.openapi.json#/components/schemas/some_prop`, data)
console.log({ valid, errors: { ...valid.errors } })
} catch (err) {
console.error(err.message)
}
#test.openapi.json
{
"openapi": "3.0.3",
"info": {
"title": "blah",
"version": "1.1.0"
},
"paths": {
"/v1/apis": {
"get": {
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/some_prop"
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"some_prop": {
"type": "object",
"properties": {
"port": {
"type": "string",
"nullable": true,
"pattern": "^[a-z]$",
"description": "description here",
"example": "jeremy"
}
}
}
}
}
}
它在 Swagger-UI 免费版本上正确显示。