How to validate a json document/string against an OpenAPI 3.0 schema in yaml with $refs using networknt/json-schema-validator?

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

我的问题类似于这个问题: 如何使用 json-schema-validator 验证带有 $refs 的 OpenAPI 模式

json 中的示例 Yaml 模式:

{ “openapi”:“3.0.0”, “信息”:{ “标题”:“API”, "description": "这个API", “版本”:“3.x” }, “服务器”:[{ “网址”:“https://api.yourcompanyexample.com/oi”, "description": "贵公司的示例服务器" }], “安全”: [{ “承载身份验证”:[] }], “标签”:[{ "name": "订单" }], “成分”: { “模式”:{ “命令”: { “必需的”: [ “接受者”, ], “类型”:“对象”, “特性”: { “接受者”: { “最大长度”:20, “类型”:“字符串”, "description": "收件人", “例子”:“乔” } “客户信息”: { "$ref": "#/components/schemas/CustomerInformation" } } }, “客户信息”: { “类型”:“对象”, “特性”: { “名”: { “最大长度”:25, “类型”:“字符串”, "description": "客户的名字" }, “电子邮件地址”: { “最大长度”:254, “类型”:“字符串”, "description": "客户的电子邮件地址" } } } } } }

示例 JSON 字符串 { "id": "DemoId", "orderId": "DemoOrderId", “客户信息”: { “名字”:“约翰”, “电子邮件地址”: [{ "emailName": "个人", “电子邮件地址”:“[email protected]” }, { "emailName": "工作", “电子邮件地址”:“[email protected]” }] } }

ObjectMapper objectMapper = new ObjectMapper(); this.yamlReader = new ObjectMapper(new YAMLFactory());

JsonSchemaFactory this.factory = JsonSchemaFactory.builder(JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V4)).objectMapper(yamlReader).addMetaSchema(myJsonMetaSchema).build();

JsonSchema = this.jsonSchema = factory.getSchema(getClass().getClassLoader().getResourceAsStream("schema.yaml"));

JsonNode jsonNode = objectMapper.readTree(getClass().getClassLoader().getResourceAsStream("data.json"));

设置错误 = jsonSchema.validate(jsonNode); // 即使收件人丢失,我也没有收到任何错误信息

JsonSchema portionSchema = factory.getSchema(jsonSchema.getSchemaNode().get("components").get("schemas").get("Order"));

// 我从模式中删除 customer: $ref: '#/components/schemas/Customer' 否则它会抱怨找不到它,因为它不再加载到 portionSchema 中

**Set errors = portionSchema.validate(jsonNode); //我收到有关必填字段的错误消息

我也尝试过从“模式”和“组件”节点加载模式。它不会给出任何错误。

我的期望是:

JsonSchema 部分架构 = factory.getSchema(jsonSchema.getSchemaNode().get("组件"); ****设置错误= portionSchema.validate(jsonNode); 它应该给出验证错误。

json yaml json-schema-validator
© www.soinside.com 2019 - 2024. All rights reserved.