SwaggerUI/YAML - should NOT have additional properties additionalProperty: requestBody
Asked Answered
A

3

18

Designing an API using editor.swagger.io I find myself unable to add a requestBody attribute, getting an error I cannot address:

Schema error at paths['/projects/{projectId}/user'].post
should NOT have additional properties
additionalProperty: requestBody
Jump to line 91

I don't understand what I'm doing wrong, especially after looking at the requestBody documentation. Research has brought me nothing other than the tendency for errors to be misleading.

EDIT: From what the answers here have shown, it looks like the editor is supposed to use OpenAPI 2.0, but actually expects 3.0 while returning errors for both. I'd use some help on what to use, given that I've included a

swagger: "2.0"

line at the beginning of the document. While testing with openapi: 3.0.0 as shown by @Mike in his answer, I just get more errors about allowed additional properties.

Here's what's generating the error, line 91 being post: .

/projects/{projectId}/user:
      post:
        tags:
        - projects
        summary: Modify project user.
        operationId: modifyProjectUser
        parameters:
        - name: projectId
          in: path
          description: ID of the project
          required: true
          type: integer
          format: int32
        requestBody:
          content: 
            application/json:
              schema:
              $ref: '#/definitions/User'
        responses:
          "200":
            description: Successful operation
            schema:
              type: array
              items:
                $ref: "#/definitions/User"
        security:
        - api_key: []
Accrescent answered 4/12, 2017 at 11:25 Comment(8)
What version of OpenAPI is it based on? The documentation link you provided states that for OpenAPI v2, requestBody isn't supported and that it uses body and formData parameters. (see here for example: swagger.io/docs/specification/2-0/describing-request-body ). Can you check what version you're using / that editor.swagger.io uses?Infantryman
You are mixing 2.0 and 3.0 syntax. 2.0 specs use swagger: '2.0', 3.0 specs use openapi: 3.0.0.Scald
@Infantryman As indicated in swagger.io/specification, Swagger 2.0 uses OAS 3.0, therefore making requestBody usable. In addition, when trying to use in: body, I get the following error: allowedValues: header, formData, query, path.Accrescent
@Helen, so what should I use in this case ? The Swagger documentation still gives me requestBody, and in: body doesn't work. I'm indeed confused.Accrescent
@Accrescent swagger.io/specification is the 3.0 spec. The 2.0 spec is github.com/OAI/OpenAPI-Specification/blob/master/versions/….Scald
Check out the examples at the link that @Infantryman posted - swagger.io/docs/specification/2-0/describing-request-bodyScald
Possible duplicate of swagger: requestBody not allowedScald
@Scald So the line swagger: "2.0" I included means that I should use the example given for OAS 3.0, right ? The examples in the link posted by @Infantryman are for OAS 2.0, and when trying to use the parameter in: body, I get the error I reported above. Do you need more elements ? How can I be sure that I'm using the right things ?Accrescent
A
18

I got clarifications from an external source, so here's what I've learned:

Specifying swagger: 2.0 also means that the OpenAPI Specification 2.0.0 is expected by the editor, whereas I thought it used OAS 3. I'm still unsure about why in: body did not work in the first place but I've added quotes around "body", which made the error disappear. Then I tried removing the quotes and it worked fine.

The editor doesn't seem very reliable when it comes to error reporting.

Accrescent answered 5/12, 2017 at 9:16 Comment(0)
B
7

This error message looked familiar. Try inserting a schema: underneath your parameter's required: line, then indent the type: and format: lines.

Since I have not yet set up my own SwaggerUI server. I took your code snippet and pasted it into SwaggerHub. Then I removed the $ref: lines just to further simplify the codebase. Here's a screenshot of the error-free result. enter image description here

Bandler answered 4/12, 2017 at 23:39 Comment(5)
Does the above fix your problem?Bandler
This did not really help. It actually show more errors. If you don't mind taking a look at this screenshot, you'll see the entire block as well as the exact errors.Accrescent
It should indeed. Thanks for noticing !Accrescent
Thank you. It works, including defining the parameters on path level. See swagger.io/docs/specification/describing-parameters/… — here the example contains schema → type.Conquer
This did not help but the image showed me the general layout and found a fix for my problem. I had requestBody under response. Sorry long day.Microbicide
P
1

In my case since I was using openapi: 3.0.0. The schema $ref should be '#/components/schemas/{schemaname}' instead of '#/definitions/schemas/{schemaname}'

Peterpeterborough answered 26/4, 2021 at 13:25 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.