标题说的差不多。我在请求正文中有一个可选对象。但是,如果指定了该对象,则必须包含一些子属性。
我的OpenAPI组件配置如下:
UserDetails:
type: object
properties:
surname:
type: string
givenName:
type: string
dob:
type: string
format: date
gender:
type: string
enum:
- male
- female
- others
partner:
type: object
properties:
name:
type: string
phone:
type: string
maxLength: 10
minLength: 10
pattern: ^[1-9]+[0-9]{9}$
required: [name, phone]
required:
- surname
- givenName
- dob
我正在使用express-openapi-validator
对此进行验证。现在,我不知道这是否是express-openapi-validator
软件包的问题,但是可选字段(合作伙伴)的必填字段(名称,电话)从未得到验证。我只提供partner: {}
,它就可以通过partner: { name: 'some name', phone: '123' }
。应验证电话号码的长度和正则表达式。
我在定义中缺少任何内容吗?
答案 0 :(得分:1)
似乎没有解决方案,但是我为和平目的关闭了它。
就像@Helen回答的一样,这似乎是库本身的问题。
在开发应用程序的过程中,我发现了更多的问题,这使我使用的库express-openapi-validator
和另一个库swagger-express-middleware
的可靠性甚至更低。
我发现的另一个问题是,只有将值作为数组提供时,才使用提供的枚举对值进行验证:
例如以下内容已正确验证:
UserLiabilities:
type: object
properties:
liabilities:
type: object
properties:
creditCards:
type: array
items:
allOf:
- $ref: '#/components/schemas/Provider'
- type: object
properties:
limit:
type: number
minimum: 0
提供者为:
Provider:
type: object
properties:
provider:
type: string
enum: ['ABC', 'DEF', 'GHI', 'Others']
但是,如果我需要provider作为对象中的纯字符串(而不是上面的数组),则不会对其进行验证。并且,它允许任何任意字符串:
homeLoan:
allOf:
- $ref: '#/components/schemas/Provider'
- type: object
properties:
amount:
type: number
minimum: 0
此行为与我尝试并提到的至少两个库是一致的。我不确定我在这里做错了什么,但是我已经失去了足够的时间来调试它,最终不得不在服务器本身中解决这个问题。