Golang JSON 模式验证库验证模式中的必需字段是否存在于服务请求/响应中。
我需要验证服务请求或响应中的任何字段都必须是架构中的属性。如果模式中不存在有效负载中的属性,则验证应该失败。
例如:GET 响应:
{
"pet": "dog",
"name": "Scooby",
"licence": "123-123"
}
在我的示例 JSON 模式中,没有任何字段是必需的。但是,如果我在我的服务中将字段“pet”更改为“petBreed”,它不会被 JSON 架构验证器(例如 https://github.com/xeipuuv/gojsonschema)捕获。
将所有字段设为必填不是一种选择。任何人都可以在 Go 中推荐一个库,它将:
- 验证所有响应字段都在模式中
- 如果模式中的字段不在响应中则不会失败
最佳答案
JSON Schema 定义 additionalProperties
为此,像这样的架构应该可以工作:
{
"type": "object",
"additionalProperties": false,
"properties":{
"pet": ...,
"name": ...,
"license": ...,
},
}
这是 implemented但在 gojsonschema
中没有记录。
请注意,additionalProperties
是一个架构,而不仅仅是一个 bool 值,即您可以对未知属性进行任意验证,而不仅仅是禁止它们。
关于使用 Golang 对可选字段进行 JSON 模式验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43977640/