提问人:Rockwell Rice 提问时间:11/3/2023 最后编辑:Rockwell Rice 更新时间:11/5/2023 访问量:48
无论如何,要让 JSON 模式在不使用类型“null”的情况下将 null OR 字符串类型识别为有效
Anyway to get JSON schema to recognize null OR string type as valid without using type "null"
问:
我知道对此的典型反应是使用
"type":"["string", "null"]
但是我们拥有的 OpenAPI 版本是 3.0.x,而不是 3.1,因此类型不可用。我正在尝试找到一种方法来让我们的 JSON 验证可以是 OR 的字段null
string
null
当前字段是
"type":"string",
"pattern": "...actual pattern is kind of long...",
"example": "2018-08-28",
"description": "Description of the field here.",
"nullable":true,
但这并不能验证 null 条目是否有效。如果我将
"type": ["string","null"],
它确实正确地验证了它,但是在编译 swagger 文档时显示时髦,所以我试图找到一种方法来允许字符串或 null,验证它并让它正确显示。如上所述,它将所有内容显示为文档中类型的一个单词。stringnull
我尝试过使用JSON模式版本
- https://json-schema.org/draft/2020-12/schema
- “http://json-schema.org/draft-07/schema#”
OpenAPI 版本 3.0.1
答:
3赞
Jeremy Fiel
11/4/2023
#1
OAS 3.0.x 具有为此目的定义的属性nullable
您使用的是哪个验证器?它可能没有实现这个关键词,这就是为什么你在使用它时遇到问题。
您可以验证它是否适用于 hyperjump-io
换出 and 以尝试不同的实例。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 免费版本上正确显示。
评论
1赞
Rockwell Rice
11/6/2023
我们使用一种叫做 json_schemer 的宝石。所以我会看看它是否没有内置,也许我们可以切换到一些东西,感谢您的回复!
评论