swagger-api / swagger-api/swagger-ui
Rendering nested object in multipart/form-data request "try it out" shows JSON vs form UI fields
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 29k
- Forks
- 9.3k
- Avg merge
- 2d 23h
- Merged PRs (30d)
- 25
Description
Q&A (please complete the following information)
- OS: macOS
- Browser: chrome
- Version: 95.0.4638.69
- Method of installation: non, using online version https://editor.swagger.io/
- Swagger-UI version: [e.g. 3.10.0]
- Swagger/OpenAPI version: OpenAPI 3.0.3
Example Swagger/OpenAPI definition:
openapi: 3.0.3
info:
title: 'My API'
version: 3.0.0
servers: []
paths:
/api_app:
post:
operationId: apiAppCreate
requestBody:
content:
multipart/form-data:
schema:
$ref: '#/components/schemas/ApiAppCreateRequest'
responses:
'200':
description: 'success'
content:
application/json:
schema: {}
components:
schemas:
ApiAppCreateRequest:
properties:
oauth:
type: object
properties:
callback_url:
type: string
example: 'https://example.com/oauth'
scopes:
type: array
items:
type: string
example:
- basic_account_info
- request_signature
type: object
Describe the bug you're encountering
When a component schema is defined that has another object nested inside of it, the UI shows JSON instead of form fields in the "try it out" page.
To reproduce...
Steps to reproduce the behavior:
- Go to https://editor.swagger.io/
- Paste the above example
- Click on POST /api_app
- Click "Try it out"
- See JSON:

Expected behavior
I believe nested objects should be represented with UI fields like any other root-level field. For example, if I move callback_url and scopes into the top-level of ApiAppCreateRequest:
openapi: 3.0.3
info:
title: 'My API'
version: 3.0.0
servers: []
paths:
/api_app:
post:
operationId: apiAppCreate
requestBody:
content:
multipart/form-data:
schema:
$ref: '#/components/schemas/ApiAppCreateRequest'
responses:
'200':
description: 'success'
content:
application/json:
schema: {}
components:
schemas:
ApiAppCreateRequest:
properties:
callback_url:
type: string
example: 'https://example.com/oauth'
scopes:
type: array
items:
type: string
example:
- basic_account_info
- request_signature
type: object
this is what I now see:

The problem is more obvious when you mix root-level properties with nested objects:

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
Reproduce the issue in Swagger UI's "Try it out" request-body form using the supplied OpenAPI 3.0.3 example. Inspect the multipart/form-data rendering path for nested object properties and compare it with the root-level case. Done means nested object fields render as form inputs rather than a JSON editor, while mixed root and nested properties remain usable.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript, openapi
- Domain
- frontend
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100