Tim
Tim

Reputation: 528

Validation error: Data does not match any schemas from 'oneOf'

I'm getting the error Data does not match any schemas from 'oneOf' with the following spec:

{
  "info": {
    "version": "1.0.0",
    "title": "REST API"
  },
  "paths": {
    "/doit": {
      "post": {
        "responses": {
          "200": {
            "description": "Successful response"
          }
        },
        "parameters": [
          {
            "type": "object",
            "schema": {
              "$ref": "#/definitions/ResponseDefinition"
            },
            "required": "true",
            "name": "docs",
            "in": "body"
          }
        ]
      }
    }
  },
  "swagger": "2.0",
  "definitions": {
    "ResponseDefinition": {
      "type": "object",
      "properties": {
        "text": {
          "type": "string",
          "description": ""
        }
      }
    }
  }
}

This full errorfrom the swagger-tools validator:

#/paths/~1doit/post/parameters/0: Data does not match any schemas from 'oneOf'
#/paths/~1doit/post/parameters/0: Data does not match any schemas from 'oneOf'
  #/required: Expected type boolean but found type string
  #/: Missing required property: type
#/paths/~1doit/post/parameters/0: Additional properties not allowed: in,name,required,schema

I don't understand the error or how to resolve.

Upvotes: 29

Views: 43657

Answers (3)

malisasmaz
malisasmaz

Reputation: 109

I realized I put wrong Model Bindings for my API.
I put FromQuery instead of FromBody

Upvotes: 0

Kirill Oficerov
Kirill Oficerov

Reputation: 2300

For me it was incorrect apidoc that led to the error. This doc produced the error:

/**
 * @openapi
 * /init:
 *   get:
 *     description: Tells the app an environment it should use
 *     parameters:
 *       - name: version
 *         in: query
 *         description: app version, for example "4.0.0"
 *         required: true
 *         type: string
 *     responses:
 *       200:
 *         description: Description
 */

Please note there is a type right under parameters

When I put type under parameters -> schema it started to be valid:

/**
 * @openapi
 * /init:
 *   get:
 *     description: Tells the app an environment it should use
 *     parameters:
 *       - name: version
 *         in: query
 *         description: app version, for example "4.0.0"
 *         required: true
 *         schema:
 *           type: string
 *     responses:
 *       200:
 *         description: Description
 */

Upvotes: 0

Ron
Ron

Reputation: 14820

You can't include type in a body parameter. That's why there's the schema. Try this:

{
  "info": {
    "version": "1.0.0",
    "title": "REST API"
  },
  "paths": {
    "/doit": {
      "post": {
        "responses": {
          "200": {
            "description": "Successful response"
          }
        },
        "parameters": [
          {
            "schema": {
              "$ref": "#/definitions/ResponseDefinition"
            },
            "required": "true",
            "name": "docs",
            "in": "body"
          }
        ]
      }
    }
  },
  "swagger": "2.0",
  "definitions": {
    "ResponseDefinition": {
      "type": "object",
      "properties": {
        "text": {
          "type": "string",
          "description": ""
        }
      }
    }
  }
}

Upvotes: 21

Related Questions