如何限制数组类型取值?JSON Schema配置遇验证问题求助
问题解决:JSON Schema数组枚举验证错误
先翻译你遇到的验证错误:
请求验证失败:错误:querystring/models必须等于允许值之一,querystring/models必须匹配anyOf中的一个模式。
你的问题出在数组的Schema配置上:当前给models数组设置了anyOf: [models],这是错误用法——这个配置要求整个数组对象本身符合models的字符串枚举规则,而非数组里的每个元素符合。所以传多个元素时,整个数组不是单个字符串,触发验证错误;传单个元素时,后端会把数组转成字符串,也是因为这个错误配置导致的解析异常。
正确配置应该用items关键字指定数组中每个元素的Schema规则,修改后的代码如下:
const models = { type: "string", enum: [ "model1", "model2", "model3", ], }; const cleanQ = { type: "object", required: ["models"], properties: { models: { type: "array", items: models, // 替换原有的anyOf配置 // 可选配置:如果要求数组至少有一个元素 // minItems: 1, // 可选配置:如果要求数组元素不重复 // uniqueItems: true }, }, additionalProperties: false, };
修改后,前端传递的数组可以包含任意多个(或单个)属于model1/model2/model3的元素,每个元素都会被正确验证,不会再出现之前的错误,后端也不会把数组转换为字符串。
内容的提问来源于stack exchange,提问作者BenGee23
相关产品推荐
相关产品推荐

