Thanks to visit codestin.com
Credit goes to github.com

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

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions