express-openapi-validator
express-openapi-validator copied to clipboard
the same oneOf schema can pass request validation. But cannot pass response validation
Here is my schema. You can see the request and response is the same
Here is my schema. You can see the request and response is the same
{
"openapi": "3.0.3",
"info": {
"title": "test",
"version": "1.0.0",
"description": "test"
},
"paths": {
"/ping": {
"post": {
"summary": "test",
"description": "test",
"x-eov-operation-handler": "ping",
"x-eov-operation-id": "ping",
"requestBody":{
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"test": {
"oneOf": [
{
"type": "object",
"properties": {
"type": { "type": "string", "enum": ["requiredMessage"] },
"message": { "type": "string" }
},
"required": ["type", "message"],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": { "type": "string", "enum": ["requiredUrl"] },
"url": { "type": "string" }
},
"required": ["type", "url"],
"additionalProperties": false
}
]
}
},
"required": ["test"]
}
}
}
},
"responses": {
"200": {
"description": "test",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"test": {
"oneOf": [
{
"type": "object",
"properties": {
"type": { "type": "string", "enum": ["requiredMessage"] },
"message": { "type": "string" }
},
"required": ["type", "message"],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": { "type": "string", "enum": ["requiredUrl"] },
"url": { "type": "string" }
},
"required": ["type", "url"],
"additionalProperties": false
}
]
}
},
"required": ["test"]
}
}
}
}
}
}
}
}
}
the operation-handler just forward the request to response
const ping = (req, res) => {
const { body } = req
res.json(body)
}
module.exports = { ping }
Here is my payload:
{
"test": {
"type": "requiredUrl",
"url": "url"
}
}
request pass, but response cannot pass
Internal Server Error: /response/test must have required property 'message', /response/test/type must be equal to one of the allowed values: requiredMessage, /response/test must have required property 'url', /response/test must match exactly one schema in oneOf