给出以下在控制器内定义的接口:
interface idAndAge {
id : string,
age : number
}
这是端点定义:
@put('/tests')
async replaceById(
@requestBody() test: idAndAge,// <--to validate the input
): Promise<void> {
await this.testRepository.updateAll(test,{id : test.id});
}
例如,当此端点接收以下输入时(其属性未在界面中定义):
{ anyKey: anyValue }
它接受它并忽略验证
它不应该允许以下值-因为我们的接口idAndAge中不包含以下值/ p
{ anyKey: anyValue }
如果要测试问题,请检查this repo
答案 0 :(得分:0)
根据documentation,您需要向模型中添加相应的模型修饰符:
为了在参数类型中使用@requestBody,必须用@model和@property装饰该参数类型中的模型。
所以您可以简单地做:
@model()
class idAndAge {
@property({ required: true })
id: string;
@property({ required: true })
age: number
}
和环回将针对生成的json模式正确验证请求正文。
更新: Afaik目前不支持添加“ allowAdditionalProperties”装饰器,但您可以按如下所示直接在requestBody-decorator中使用json模式:
@requestBody({
required: true,
content: {
'application/json': {
schema: {
type: 'object',
additionalProperties: false, // <=== important
properties: {
id: { type: 'string' },
age: { type: 'number' }
},
required: [
"id"
]
}
}
}})