express-openapi-validator icon indicating copy to clipboard operation
express-openapi-validator copied to clipboard

coerceTypes "array" is not working for query params

Open daneryl opened this issue 2 years ago • 1 comments

Describe the bug From my understanding of the documentation, the coerceTypes option is set to 'true' by default. However, I am unable to modify this setting to other options, such as 'array'.

To Reproduce

  • Create a basic openapi document with an object param that nests an array param
{
  "paths": {
    "/api/route": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "property",
            "schema": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "values": { "type": "array", "items": { "type": "string" } }
              }
            }
          }
        ]
      }
    }
  }
}
  • Configure coerceTypes to array
  • perform a a request like http://localhost/api/route?property[values]=value1

Actual behavior

{
 "errors": [
  {
   "path": "/query/property/values",
   "message": "must be array",
   "errorCode": "type.openapi.validation"
  }
 ]
}

Expected behavior Pass validation and coerce the values properly to an array, as per documentation https://ajv.js.org/coercion.html

Examples and context Not sure why but on a simpler case this is working and the value apparently is properly coerced to an array http://localhost/api/route?property=value1

{
  "paths": {
    "/api/route": {
      "get": {
        "parameters": [
         {
            "in": "query",
            "name": "property",
            "schema": { "type": "array", "items": { "type": "string" } }
          }
        ]
      }
    }
  }
}

daneryl avatar Feb 02 '23 08:02 daneryl

Hi,

Any update about this issue ? I have the same problem, and I cannot find any workaround. But I can confirm the PR #809 solve the problem. Is it possible to review and merge it ?

Thank you,

Laurent

lleleux avatar Jun 06 '23 14:06 lleleux