Skip to content

@RequestPart JSON parameters missing Content-Type in generated curl commands, causing 415 errors #3050

@corneliusroemer

Description

@corneliusroemer

Describe the bug

springdoc-openapi generates incorrect curl commands in Swagger UI for @RequestPart parameters that contain JSON data in multipart/form-data requests. The generated curl commands are missing the required type=application/json specification for JSON parts, causing 415 Unsupported Media Type errors when executed.

To Reproduce
Spring Boot Version: 3.5.4
springdoc-openapi Version: 2.8.9
Modules: springdoc-openapi-starter-webmvc-ui

data class MetaData(
    val name: String,
    val value: String,
    val settings: Map<String, String> = emptyMap()
)

@PostMapping("/class-works", consumes = ["multipart/form-data"])
fun dataClass(
    @Parameter(
        description = "Metadata as a concrete class",
        required = true,
        content = [Content(
            mediaType = "application/json",
            schema = Schema(implementation = MetaData::class)
        )]
    )
    @RequestPart metadata: MetaData,
): String {
    return "Received metadata: ${metadata.name} = ${metadata.value}"
}
  1. Start the application and visit Swagger UI
  2. Try the /class-works endpoint using "Try it out"
  3. Observe the generated curl command and the 415 error response

Actual curl:

curl -X 'POST' \
  'http://localhost:8080/class-works' \
  -H 'accept: */*' \
  -H 'Content-Type: multipart/form-data' \
  -F 'metadata={"name":"string","value":"string","settings":{}}'

Expected behavior

curl -X 'POST' \
  'http://localhost:8080/class-works' \
  -H 'accept: */*' \
  -H 'Content-Type: multipart/form-data' \
  -F 'metadata={"name":"string","value":"string","settings":{}};type=application/json'

Screenshots

Image

Possibly related to #3049

See https://github.com/corneliusroemer/springdocbug for E2E reproducible example

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions