swagger-api / swagger-api/swagger-codegen

Required nested properties in RequestBody not working as expected

Open
#9,354 6 comments 36 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Mustache
Stars
17.8k
Forks
6k
PR merge metrics
No merged PRs in 30d

Description

I tried to generate an OpenApi definition using a nested object with a field marked as required and a field marked as optional but it hasn't worked as intended.

This is the Swagger/OpenAPI definition I used:

yaml
openapi: 3.0.0
info:
    title: Example API
    description: Example API specification
    version: 0.0.1
servers:
  - url: https://example/api

paths:
  /secure/oauth/services/v2/Nested:
    post:
      summary: Try nested
      description: Used to post Nested obj
      requestBody:
        required: true
        content:
          application/json:
            schema:
                type: object 
                required:
                - id
                - nestedobj
                properties:
                    id:
                      type: integer
                      description: id of nested obj
                    nestedobj:
                      type: object 
                      required:
                      - field1
                      description: nested object
                      properties:
                        field1:
                          type: string
                        field2:
                          type: string
      responses:
        '200':
          description: Nested object OK

This is the result I got:

Screenshot

image

Issue

As you can see in the screenshot fields are not marked as required as expected.
The issue is that I can't make field1 required and field2 optional
As you can see, in my html client, and field1 and field2 are both optional, while in my yaml i declared field1 as required and field2 as optional.

Opened the issue as @shockey requested (I thought it was a swagger-editor issue). I found a workaround using components as follows:

openapi: 3.0.0
info:
    title: Example API
    description: Example API specification
    version: 0.0.2
servers:
  - url: https://example/api

paths:
  /secure/oauth/services/v2/Nested:
    post:
      summary: Try nested
      description: Used to post Nested obj
      requestBody:
        required: true
        content:
          application/json:
            schema:
                type: object 
                required:
                - id
                - nestedobj
                properties:
                    id:
                      type: integer
                      description: id of nested obj
                    nestedobj:
                      $ref: '#/components/schemas/nestedobj'
      responses:
        '200':
          description: Nested object OK

components:
  schemas:
    element:
      type: object
      required:
      - fieldArray1
      properties:
        fieldArray1:
          type: string
          description: field array
        fieldArray2:
          type: number
    nestedobj:
      type: object
      required:
      - field1
      description: nested object
      properties:
        field1:
          $ref: '#/components/schemas/woah'
        field2:
          type: string
    woah:
      type: object
      required:
      - woahthis
      description: woah this
      properties:
        field3:
          type: array
          items:
            $ref: '#/components/schemas/element'
        woahthis:
          type: number
          description: numeber woah this
Related question on stackoverflow:

https://stackoverflow.com/questions/54803837/openapi-required-property-in-nested-objects-not-working

Related issues/PRs

https://github.com/swagger-api/swagger-editor/issues/1952

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the supplied inline nested schema and compare the generated HTML client with the components/$ref workaround. Review the related swagger-editor issue/PR 1952, then verify that field1 is marked required while field2 remains optional in the generated output.

Written by the indexing model from the issue text.

Assessment

Tech stack
yaml
Domain
api, tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.