我在nodejs应用程序中有一个swagger.yaml文件,如下所示
/updateuser/{userId}:
x-swagger-router-controller: User
put:
tags:
- User
summary: Update User
description: Update User
operationId: updateUser
parameters:
- name: userId
in: path
description: userId for which subscription needs to be updated
type: string
required: true
- name: subData
in: body
description: Subscription To be updated
schema:
type: array
items:
$ref: "#/definitions/userDataInput"
responses:
"200":
description: Success
schema:
$ref: "#/definitions/Response"
"500":
description: Error
schema:
$ref: "#/definitions/ErrorResponse"
definitions:
userDataInput:
required:
- productId
- subscriptionId
properties:
productId:
type: string
subscriptionId:
type: string
现在我使用nodejs模块swagger-model-validator在我的用户控制器中验证subData,例如下面给出的代码
var yaml = require('js-yaml')
var fs = require('fs')
var swaggerObject
try {
swaggerObject = yaml.safeLoad(fs.readFileSync('swagger.yaml'), 'utf8')
} catch (err) {
// Error here
}
var Validator = require('swagger-model-validator')
var validator = new Validator(swaggerObject)
var validation = validator.swagger.validateModel('subData', body,
false, true)
if (validation.valid) {
// logic here
} else {
// show error
}
用户将像PUT / updateuser / {userId}和body参数subData一样调用此API
[{
"userId": "DSHS333FHFHD",
"productId": "465454445",
},
"userId": "RYY48433FHFHD",
"productId": "435654125",
}
]
但问题是,它没有验证对象数组userDataInput,我已经给出了productId和subscriptionId必填字段,如果我省略了productId它没有给出任何错误,并且如果为ex productId1添加了一些额外的字段,它也没有验证。任何帮助。
我认为问题出在你正在创建的Swagger对象中。您可能最好直接使用验证器并手动传递模型。
validator.validate(object, swaggerModel, swaggerModels, allowBlankTarget, disallowExtraProperties);
您似乎是在Swagger定义中传递,而不是通常已经解码您的定义的swagger客户端。
swaggerModel将是您的subData架构部分,swaggerModels将是您的定义部分。