swagger-api / swagger-api/swagger-codegen
Required nested properties in RequestBody not working as expected
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

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
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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