我有一个API /v1/test/{note?}
我为此添加了以下代码。
module.exports = [
{
method: 'POST',
path: '/v1/test/{note?}',
config: {
description: 'Greet user',
notes: ['Use to greet a user'],
tags: ['api'],
handler: defaultHandler,
timeout:{
server:3000
},
validate: {
params: {
note: Joi.string()
.required()
.valid(['param1', 'param2', 'param3'])
.description('Notes')
a: Joi.string().required().description('for param2')
b: Joi.string().required().description('for param3')
},
headers: {
name: Joi.string().required()
},options: {
allowUnknown: true
}
}
}
}
];
在Swagger UI中,如果我从下拉列表中选择param2,那么ui应该显示 a ,如果我选择param3 ui应该显示 b 或者param1应该是显示名称(标题参数)
答案 0 :(得分:0)
您可以使用Joi验证来定义条件 https://github.com/hapijs/joi/blob/v13.1.2/API.md#anywhencondition-options
{
note: Joi.string()
.required()
.valid(['param1', 'param2', 'param3'])
.description('Notes'),
a: Joi.string()
.description('for param2')
.when('note', { is: 'param2', then: Joi.required() }),
b: Joi.string()
.description('for param3')
.when('note', { is: 'param3', then: Joi.required() }),
}
但 hapi-swagger并不完全支持。 when
实际上是alternatives
。
有一系列无法移植到swagger的功能 https://github.com/glennjones/hapi-swagger/blob/master/usageguide.md#features-from-hapi-that-cannot-be-ported-to-swagger