Rosen Hristov
Rosen Hristov

Reputation: 91

Endpoint with 'Content-type: application/x-www-form-urlencoded' returns 415 Unsupported Media Type although defined in api.yml

I am using SptringBoot 3.3.4 I am building and enpoint with OpenAPI (Swagger) io.swagger.core.v3 and openapi generator 7.9.0. Here is the definition in api.yaml:

paths:
  /verify:
    post:
      tags:
        - Verification
      summary: Verifies Verifiable Presenttion
      description: Accepts a Verifiable Presentation JWT string for verification.
      operationId: verifyVerPresentation
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                vp_token:
                  type: array
                  items:
                    type: string
                  description: array of VP JWT token strings
                presentation_submission:
                  type: string
                  description: URL encoded JSON
                state:
                  type: string
                  format: uuid
                  description: "Optional state parameter."
                  example: "31283ee9-c49c-415c-b5d5-055aa380eb63"
              required:
                - vp_token
                - presentation_submission
      responses:
        "200":
          description: VP successfully verified
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VerificationResponse'
        "400":
          description: Invalid request
        "500":
          description: Server error

This generates the following VerificationAPI:

@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.9.0")
@Validated
@Tag(name = "Verification", description = "Endpoints defined by the OpenID for Verifiable Presentation Verifier spec")
public interface VerificationApi {

    /**
     * POST /verify : Verify VP
     * Accepts a JWT VP for verification.
     *
     * @param vpToken array of VP JWT token strings (required)
     * @param presentationSubmission URL encoded JSON string (required)
     * @param state Optional state parameter. (optional)
     * @return VP successfully verified (status code 200)
     *         or Invalid request (status code 400)
     *         or Server error (status code 500)
     */
    @Operation(
        operationId = "verifyVerPresentation",
        summary = "Verify VP",
        description = "Accepts a JWT VP for verification.",
        tags = { "Verification" },
        responses = {
            @ApiResponse(responseCode = "200", description = "VP successfully verified", content = {
                @Content(mediaType = "application/json", schema = @Schema(implementation = VerificationResponseResource.class))
            }),
            @ApiResponse(responseCode = "400", description = "Invalid request"),
            @ApiResponse(responseCode = "500", description = "Server error")
        }
    )
    @RequestMapping(
        method = RequestMethod.POST,
        value = "/verify",
        produces = { "application/json" },
        consumes = "application/x-www-form-urlencoded"
    )
    
    ResponseEntity<VerificationResponseResource> verifyVerPresentation (
        @Parameter(name = "vp_token", description = "array of VP JWT token strings", required = true) @Valid @RequestPart(value = "vp_token", required = true) List<String> vpToken,
        @Parameter(name = "presentation_submission", description = "URL encoded JSON string", required = true) @Valid @RequestParam(value = "presentation_submission", required = true) String presentationSubmission,
        @Parameter(name = "state", description = "Optional state parameter.") @Valid @RequestParam(value = "state", required = false) UUID state);

}

Respectively my controller is:

 @RestController
 @RequiredArgsConstructor
public class VerificationController implements VerificationApi {

    private final VPValidationService vpValidationService;
    private final ValidationResponseMapper validationResponseMapper;
    private final ObjectMapper objectMapper;

    @Override
    public ResponseEntity<ValidationResponseDTO> verifyVerPresentation(
                                        @RequestParam(name = "vp_token") List<String> vpTokens,
                                        @RequestParam(name="presentation_submission") String presentationSubmission,
                                        @RequestParam(required = false) UUID state) {
        PresentationSubmission presSubmissionEntity = parsePresentationSubmissionEntity(presentationSubmission);
        ValidationResponse responseBody = vpValidationService.verifyVerPresentation(vpTokens, presSubmissionEntity);

        return ResponseEntity.ok(verificationResponseMapper.toResource(responseBody));
    }
}

So, although I have defined: content: application/x-www-form-urlencoded in api.yaml, I get:

415 Unsupported Media Type

when I run the endpoint with appropriate params: vp_token: list of JWT strings, presentation_submission: url encoded Json string, state: UUID-formatted string.

The request returns this error only in Swagger, if I test it in Postman, it works. The reason is that in Postman I send this curl request:

Postman request works( code 200)
curl \
--location \
--request POST \
'http://localhost:8082/verify \
?vp_token=eyJraWQiOiJkaWQ6a2V5Ono2TWtyeUdKTXdOS1g4aXlZcGdWVmp2ckNBdmthVzlzbkw5cHFQN0JQWEdmM3FMUSIsInR5cCI6IkpXVCIsImFsZyI6IkVkRFNBIn0.eyJpc3MiOiJkaWQ6a2V5Ono2TWtyeUdKTXdOS1g4aXlZcGdWVmp2ckNBdmthVzlzbkw5cHFQN0JQWEdmM3FMUSIsInZwIjp7InByZXNlbnRhdGlvbkRlZmluaXRpb25JZCI6IjI5MTEzMTBkLTNlNDUtNGFhNS1iYTYzLWQ5M2QxM2Q1YzVhNSIsImlzc3VhbmNlRGF0ZSI6IjIwMjUtMDItMjVUMDc6NDQ6MTguMzMyODY4NjAwWiIsImhvbGRlciI6ImRpZDprZXk6ejZNa3J5R0pNd05LWDhpeVlwZ1ZWanZyQ0F2a2FXOXNuTDlwcVA3QlBYR2YzcUxRIiwidHlwZSI6WyJWZXJpZmlhYmxlUHJlc2VudGF0aW9uIl0sIkBjb250ZXh0IjpbImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL3YxIl0sInZlcmlmaWFibGVDcmVkZW50aWFsIjpbImV5SnJhV1FpT2lKa2FXUTZhbmRyT21WNVNuSmtTR3RwVDJsS1JsRjVTWE5KYlU1NVpHbEpOa2xzUVhSTmFsVXlTV2wzYVdFeWJHdEphbTlwVFRGc1QxcEViRWRpYm1jMVUyMTROVlZHV2xwa01tUllVbXRWZWs0d1ZYcFNNMlJLVFVkV1NHSkZUa3hQU0dSSFlrWmtORkl5V25kVVUwbHpTVzVuYVU5cFNrZGlNMXBhVFdwR1RWRlZSbEJXUjNodVRGY3dkRlJ0Vmt4V01taGhVbFYzTVZsVldubGliRWwzWkZkT1MyRnJVVEZXUlhSM1VqTldia2xwZDJsbFUwazJTV3RPZVZKcmNHMVNNVkpyVlVSSk5WTnJjR3BaTTBKU1YwaFdOVlJWT0hwaU1tZ3daVzVLVldOV1FqWlJiRUpEVTFaU1dtRnFRblphTUVWcFpsRWlMQ0owZVhBaU9pSktWMVFpTENKaGJHY2lPaUpGVXpJMU5pSjkuZXlKcGMzTWlPaUprYVdRNmFuZHJPbVY1U25Ka1NHdHBUMmxLUmxGNVNYTkpiVTU1WkdsSk5rbHNRWFJOYWxVeVNXbDNhV0V5Ykd0SmFtOXBUVEZzVDFwRWJFZGlibWMxVTIxNE5WVkdXbHBrTW1SWVVtdFZlazR3VlhwU00yUktUVWRXU0dKRlRreFBTR1JIWWtaa05GSXlXbmRVVTBselNXNW5hVTlwU2tkaU0xcGFUV3BHVFZGVlJsQldSM2h1VEZjd2RGUnRWa3hXTW1oaFVsVjNNVmxWV25saWJFbDNaRmRPUzJGclVURldSWFIzVWpOV2JrbHBkMmxsVTBrMlNXdE9lVkpyY0cxU01WSnJWVVJKTlZOcmNHcFpNMEpTVjBoV05WUlZPSHBpTW1nd1pXNUtWV05XUWpaUmJFSkRVMVpTV21GcVFuWmFNRVZwWmxFaUxDSnpkV0lpT2lKa2FXUTZhbmRyT21WNVNuSmtTR3RwVDJsS1VGTXhRV2xNUTBwcVkyNVphVTlwU2taYVJFa3hUbFJGTlVscGQybGhNbXhyU1dwdmFXRlZhRWRSVm1oSFUxaHNTRkpHYUhWUk0xcDVVMWhXU2xaVlZtaGtTRnB6V2xkV1JXVkhkRk5hTUZaTVZESlNObHBHWkdGaE0yUkRVVk5KYzBsdVoybFBhVXBaVDBkNFUyRXdhSFZSVmxKS1lXdHZNVmxVVWtoWGJFcENaV3M1U0dWcWJHbGlNa1V6V0hwSmRGSkhNVlZWVmpsSFpVaEtSbE5WV2xaSmJqQWlMQ0oyWXlJNmV5SkFZMjl1ZEdWNGRDSTZXeUpvZEhSd2N6b3ZMM2QzZHk1M015NXZjbWN2TWpBeE9DOWpjbVZrWlc1MGFXRnNjeTkyTVNKZExDSjBlWEJsSWpwYklsWmxjbWxtYVdGaWJHVkRjbVZrWlc1MGFXRnNJaXdpU1dSbGJuUnBkSGxEY21Wa1pXNTBhV0ZzSWwwc0ltbGtJam9pZFhKdU9uVjFhV1E2WVRVNE5qSTVaVEl0TURnM1ppMDBZak0wTFRrMll6TXRaRFppTWpkaVlXVTFORFk0SWl3aVkzSmxaR1Z1ZEdsaGJGTjFZbXBsWTNRaU9uc2laMmwyWlc1ZmJtRnRaU0k2SWtwdmFHNGlMQ0ptWVcxcGJIbGZibUZ0WlNJNklrUnZaU0lzSW1WdFlXbHNJam9pYW05b2JtUnZaVUJsZUdGdGNHeGxMbU52YlNJc0luQm9iMjVsWDI1MWJXSmxjaUk2SWlzeExUSXdNaTAxTlRVdE1ERXdNU0lzSW1Ga1pISmxjM01pT25zaWMzUnlaV1YwWDJGa1pISmxjM01pT2lJeE1qTWdUV0ZwYmlCVGRDSXNJbXh2WTJGc2FYUjVJam9pUVc1NWRHOTNiaUlzSW5KbFoybHZiaUk2SWtGdWVYTjBZWFJsSWl3aVkyOTFiblJ5ZVNJNklsVlRJbjBzSW1KcGNuUm9aR0YwWlNJNklqRTVOREF0TURFdE1ERWlMQ0pwYzE5dmRtVnlYekU0SWpwMGNuVmxMQ0pwYzE5dmRtVnlYekl4SWpwMGNuVmxMQ0pwYzE5dmRtVnlYelkxSWpwMGNuVmxMQ0pwWkNJNkltUnBaRHBxZDJzNlpYbEtjbVJJYTJsUGFVcFFVekZCYVV4RFNtcGpibGxwVDJsS1JscEVTVEZPVkVVMVNXbDNhV0V5Ykd0SmFtOXBZVlZvUjFGV2FFZFRXR3hJVWtab2RWRXpXbmxUV0ZaS1ZsVldhR1JJV25OYVYxWkZaVWQwVTFvd1ZreFVNbEkyV2taa1lXRXpaRU5SVTBselNXNW5hVTlwU2xsUFIzaFRZVEJvZFZGV1VrcGhhMjh4V1ZSU1NGZHNTa0psYXpsSVpXcHNhV0l5UlROWWVrbDBVa2N4VlZWV09VZGxTRXBHVTFWYVZrbHVNQ0o5TENKcGMzTjFaWElpT25zaWFXUWlPaUprYVdRNmFuZHJPbVY1U25Ka1NHdHBUMmxLUmxGNVNYTkpiVTU1WkdsSk5rbHNRWFJOYWxVeVNXbDNhV0V5Ykd0SmFtOXBUVEZzVDFwRWJFZGlibWMxVTIxNE5WVkdXbHBrTW1SWVVtdFZlazR3VlhwU00yUktUVWRXU0dKRlRreFBTR1JIWWtaa05GSXlXbmRVVTBselNXNW5hVTlwU2tkaU0xcGFUV3BHVFZGVlJsQldSM2h1VEZjd2RGUnRWa3hXTW1oaFVsVjNNVmxWV25saWJFbDNaRmRPUzJGclVURldSWFIzVWpOV2JrbHBkMmxsVTBrMlNXdE9lVkpyY0cxU01WSnJWVVJKTlZOcmNHcFpNMEpTVjBoV05WUlZPSHBpTW1nd1pXNUtWV05XUWpaUmJFSkRVMVpTV21GcVFuWmFNRVZwWmxFaUxDSnVZVzFsSWpvaVIyOTJaWEp1YldWdWRDQnZaaUJCYm5sMGIzZHVJbjBzSW1semMzVmhibU5sUkdGMFpTSTZJakl3TWpRdE1URXRNVGxVTVRNNk1qQTZOVEV1TlRVd01EUXhOVGsyV2lJc0luWmhiR2xrUm5KdmJTSTZJakl3TWpRdE1URXRNVGxVTVRNNk1qQTZOVEV1TlRVd01URTFPVE0yV2lJc0ltVjRjR2x5WVhScGIyNUVZWFJsSWpvaU1qQXlOUzB4TVMweE9WUXhNem95TURvMU1TNDFOVEF4TkRVNU1qWmFJbjBzSW1wMGFTSTZJblZ5YmpwMWRXbGtPbUUxT0RZeU9XVXlMVEE0TjJZdE5HSXpOQzA1Tm1NekxXUTJZakkzWW1GbE5UUTJPQ0lzSW1WNGNDSTZNVGMyTXpVMU9EUTFNU3dpYVdGMElqb3hOek15TURJeU5EVXhMQ0p1WW1ZaU9qRTNNekl3TWpJME5URjkubk5qbVptZjVRNFFZLWQyR2pVdjZmMDIzakZWb0tmNll0cS1sUlloWnNkWGZ0V2xialBQd1dLTW5zUGY5WXk5b2NLTkU0QmowcU43SmwtbVgyYmJOekEiXX0sImV4cCI6MTc0MDQ3MzA1OCwiaWF0IjoxNzQwNDY5NDU4fQ.XjUpm9zJbVjKB8NplJ9nHKHG3Z3McgJj46Paul4R9zYQihVTAR18RjUbX18FbMJ4KH8n-lAzD-MmfJ0SaNWlDw \
&presentation_submission=%7B%0A%20%20%22id%22%20%3A%20%22sVWoJj7Aj6HD%22%2C%0A%20%20%22definition_id%22%20%3A%20%222911310d-3e45-4aa5-ba63-d93d13d5c5a5%22%2C%0A%20%20%22descriptor_map%22%20%3A%20%5B%7B%0A%20%20%20%20%22id%22%20%3A%20%22IdentityCredential%22%2C%0A%20%20%20%20%22format%22%20%3A%20%22jwt_vp%22%2C%0A%20%20%20%20%22path%22%20%3A%20%22%24%22%2C%0A%20%20%20%20%22path_nested%22%20%3A%20%7B%0A%20%20%20%20%20%20%22id%22%20%3A%20%22IdentityCredential%22%2C%0A%20%20%20%20%20%20%22format%22%20%3A%20%22jwt_vc_json%22%2C%0A%20%20%20%20%20%20%22path%22%20%3A%20%22%24.verifiableCredential%5B0%5D%22%0A%20%20%20%20%7D%0A%20%20%7D%5D%0A%7D%20&state=bc2e852c-4991-47e0-9677-45faf8d51ded' \
--header 'Content-Type: application/x-www-form-urlencoded'

with --header 'Content-Type: application/x-www-form-urlencoded' included.

In Swagger, however, this curl request is generated:

Swagger request in the browser (code 415 "Unsupported Media Type",)
curl -X 'POST' \
'http://localhost:8082/verify \
?vp_token=eyJraWQiOiJkaWQ6a2V5Ono2TWtyeUdKTXdOS1g4aXlZcGdWVmp2ckNBdmthVzlzbkw5cHFQN0JQWEdmM3FMUSIsInR5cCI6IkpXVCIsImFsZyI6IkVkRFNBIn0.eyJpc3MiOiJkaWQ6a2V5Ono2TWtyeUdKTXdOS1g4aXlZcGdWVmp2ckNBdmthVzlzbkw5cHFQN0JQWEdmM3FMUSIsInZwIjp7InByZXNlbnRhdGlvbkRlZmluaXRpb25JZCI6IjI5MTEzMTBkLTNlNDUtNGFhNS1iYTYzLWQ5M2QxM2Q1YzVhNSIsImlzc3VhbmNlRGF0ZSI6IjIwMjUtMDItMjVUMDc6NDQ6MTguMzMyODY4NjAwWiIsImhvbGRlciI6ImRpZDprZXk6ejZNa3J5R0pNd05LWDhpeVlwZ1ZWanZyQ0F2a2FXOXNuTDlwcVA3QlBYR2YzcUxRIiwidHlwZSI6WyJWZXJpZmlhYmxlUHJlc2VudGF0aW9uIl0sIkBjb250ZXh0IjpbImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL3YxIl0sInZlcmlmaWFibGVDcmVkZW50aWFsIjpbImV5SnJhV1FpT2lKa2FXUTZhbmRyT21WNVNuSmtTR3RwVDJsS1JsRjVTWE5KYlU1NVpHbEpOa2xzUVhSTmFsVXlTV2wzYVdFeWJHdEphbTlwVFRGc1QxcEViRWRpYm1jMVUyMTROVlZHV2xwa01tUllVbXRWZWs0d1ZYcFNNMlJLVFVkV1NHSkZUa3hQU0dSSFlrWmtORkl5V25kVVUwbHpTVzVuYVU5cFNrZGlNMXBhVFdwR1RWRlZSbEJXUjNodVRGY3dkRlJ0Vmt4V01taGhVbFYzTVZsVldubGliRWwzWkZkT1MyRnJVVEZXUlhSM1VqTldia2xwZDJsbFUwazJTV3RPZVZKcmNHMVNNVkpyVlVSSk5WTnJjR3BaTTBKU1YwaFdOVlJWT0hwaU1tZ3daVzVLVldOV1FqWlJiRUpEVTFaU1dtRnFRblphTUVWcFpsRWlMQ0owZVhBaU9pSktWMVFpTENKaGJHY2lPaUpGVXpJMU5pSjkuZXlKcGMzTWlPaUprYVdRNmFuZHJPbVY1U25Ka1NHdHBUMmxLUmxGNVNYTkpiVTU1WkdsSk5rbHNRWFJOYWxVeVNXbDNhV0V5Ykd0SmFtOXBUVEZzVDFwRWJFZGlibWMxVTIxNE5WVkdXbHBrTW1SWVVtdFZlazR3VlhwU00yUktUVWRXU0dKRlRreFBTR1JIWWtaa05GSXlXbmRVVTBselNXNW5hVTlwU2tkaU0xcGFUV3BHVFZGVlJsQldSM2h1VEZjd2RGUnRWa3hXTW1oaFVsVjNNVmxWV25saWJFbDNaRmRPUzJGclVURldSWFIzVWpOV2JrbHBkMmxsVTBrMlNXdE9lVkpyY0cxU01WSnJWVVJKTlZOcmNHcFpNMEpTVjBoV05WUlZPSHBpTW1nd1pXNUtWV05XUWpaUmJFSkRVMVpTV21GcVFuWmFNRVZwWmxFaUxDSnpkV0lpT2lKa2FXUTZhbmRyT21WNVNuSmtTR3RwVDJsS1VGTXhRV2xNUTBwcVkyNVphVTlwU2taYVJFa3hUbFJGTlVscGQybGhNbXhyU1dwdmFXRlZhRWRSVm1oSFUxaHNTRkpHYUhWUk0xcDVVMWhXU2xaVlZtaGtTRnB6V2xkV1JXVkhkRk5hTUZaTVZESlNObHBHWkdGaE0yUkRVVk5KYzBsdVoybFBhVXBaVDBkNFUyRXdhSFZSVmxKS1lXdHZNVmxVVWtoWGJFcENaV3M1U0dWcWJHbGlNa1V6V0hwSmRGSkhNVlZWVmpsSFpVaEtSbE5WV2xaSmJqQWlMQ0oyWXlJNmV5SkFZMjl1ZEdWNGRDSTZXeUpvZEhSd2N6b3ZMM2QzZHk1M015NXZjbWN2TWpBeE9DOWpjbVZrWlc1MGFXRnNjeTkyTVNKZExDSjBlWEJsSWpwYklsWmxjbWxtYVdGaWJHVkRjbVZrWlc1MGFXRnNJaXdpU1dSbGJuUnBkSGxEY21Wa1pXNTBhV0ZzSWwwc0ltbGtJam9pZFhKdU9uVjFhV1E2WVRVNE5qSTVaVEl0TURnM1ppMDBZak0wTFRrMll6TXRaRFppTWpkaVlXVTFORFk0SWl3aVkzSmxaR1Z1ZEdsaGJGTjFZbXBsWTNRaU9uc2laMmwyWlc1ZmJtRnRaU0k2SWtwdmFHNGlMQ0ptWVcxcGJIbGZibUZ0WlNJNklrUnZaU0lzSW1WdFlXbHNJam9pYW05b2JtUnZaVUJsZUdGdGNHeGxMbU52YlNJc0luQm9iMjVsWDI1MWJXSmxjaUk2SWlzeExUSXdNaTAxTlRVdE1ERXdNU0lzSW1Ga1pISmxjM01pT25zaWMzUnlaV1YwWDJGa1pISmxjM01pT2lJeE1qTWdUV0ZwYmlCVGRDSXNJbXh2WTJGc2FYUjVJam9pUVc1NWRHOTNiaUlzSW5KbFoybHZiaUk2SWtGdWVYTjBZWFJsSWl3aVkyOTFiblJ5ZVNJNklsVlRJbjBzSW1KcGNuUm9aR0YwWlNJNklqRTVOREF0TURFdE1ERWlMQ0pwYzE5dmRtVnlYekU0SWpwMGNuVmxMQ0pwYzE5dmRtVnlYekl4SWpwMGNuVmxMQ0pwYzE5dmRtVnlYelkxSWpwMGNuVmxMQ0pwWkNJNkltUnBaRHBxZDJzNlpYbEtjbVJJYTJsUGFVcFFVekZCYVV4RFNtcGpibGxwVDJsS1JscEVTVEZPVkVVMVNXbDNhV0V5Ykd0SmFtOXBZVlZvUjFGV2FFZFRXR3hJVWtab2RWRXpXbmxUV0ZaS1ZsVldhR1JJV25OYVYxWkZaVWQwVTFvd1ZreFVNbEkyV2taa1lXRXpaRU5SVTBselNXNW5hVTlwU2xsUFIzaFRZVEJvZFZGV1VrcGhhMjh4V1ZSU1NGZHNTa0psYXpsSVpXcHNhV0l5UlROWWVrbDBVa2N4VlZWV09VZGxTRXBHVTFWYVZrbHVNQ0o5TENKcGMzTjFaWElpT25zaWFXUWlPaUprYVdRNmFuZHJPbVY1U25Ka1NHdHBUMmxLUmxGNVNYTkpiVTU1WkdsSk5rbHNRWFJOYWxVeVNXbDNhV0V5Ykd0SmFtOXBUVEZzVDFwRWJFZGlibWMxVTIxNE5WVkdXbHBrTW1SWVVtdFZlazR3VlhwU00yUktUVWRXU0dKRlRreFBTR1JIWWtaa05GSXlXbmRVVTBselNXNW5hVTlwU2tkaU0xcGFUV3BHVFZGVlJsQldSM2h1VEZjd2RGUnRWa3hXTW1oaFVsVjNNVmxWV25saWJFbDNaRmRPUzJGclVURldSWFIzVWpOV2JrbHBkMmxsVTBrMlNXdE9lVkpyY0cxU01WSnJWVVJKTlZOcmNHcFpNMEpTVjBoV05WUlZPSHBpTW1nd1pXNUtWV05XUWpaUmJFSkRVMVpTV21GcVFuWmFNRVZwWmxFaUxDSnVZVzFsSWpvaVIyOTJaWEp1YldWdWRDQnZaaUJCYm5sMGIzZHVJbjBzSW1semMzVmhibU5sUkdGMFpTSTZJakl3TWpRdE1URXRNVGxVTVRNNk1qQTZOVEV1TlRVd01EUXhOVGsyV2lJc0luWmhiR2xrUm5KdmJTSTZJakl3TWpRdE1URXRNVGxVTVRNNk1qQTZOVEV1TlRVd01URTFPVE0yV2lJc0ltVjRjR2x5WVhScGIyNUVZWFJsSWpvaU1qQXlOUzB4TVMweE9WUXhNem95TURvMU1TNDFOVEF4TkRVNU1qWmFJbjBzSW1wMGFTSTZJblZ5YmpwMWRXbGtPbUUxT0RZeU9XVXlMVEE0TjJZdE5HSXpOQzA1Tm1NekxXUTJZakkzWW1GbE5UUTJPQ0lzSW1WNGNDSTZNVGMyTXpVMU9EUTFNU3dpYVdGMElqb3hOek15TURJeU5EVXhMQ0p1WW1ZaU9qRTNNekl3TWpJME5URjkubk5qbVptZjVRNFFZLWQyR2pVdjZmMDIzakZWb0tmNll0cS1sUlloWnNkWGZ0V2xialBQd1dLTW5zUGY5WXk5b2NLTkU0QmowcU43SmwtbVgyYmJOekEiXX0sImV4cCI6MTc0MDQ3MzA1OCwiaWF0IjoxNzQwNDY5NDU4fQ.XjUpm9zJbVjKB8NplJ9nHKHG3Z3McgJj46Paul4R9zYQihVTAR18RjUbX18FbMJ4KH8n-lAzD-MmfJ0SaNWlDw \
&presentation_submission=%257B%250A%2520%2520%2522id%2522%2520%253A%2520%2522sVWoJj7Aj6HD%2522%252C%250A%2520%2520%2522definition_id%2522%2520%253A%2520%25222911310d-3e45-4aa5-ba63-d93d13d5c5a5%2522%252C%250A%2520%2520%2522descriptor_map%2522%2520%253A%2520%255B%257B%250A%2520%2520%2520%2520%2522id%2522%2520%253A%2520%2522IdentityCredential%2522%252C%250A%2520%2520%2520%2520%2522format%2522%2520%253A%2520%2522jwt_vp%2522%252C%250A%2520%2520%2520%2520%2522path%2522%2520%253A%2520%2522%2524%2522%252C%250A%2520%2520%2520%2520%2522path_nested%2522%2520%253A%2520%257B%250A%2520%2520%2520%2520%2520%2520%2522id%2522%2520%253A%2520%2522IdentityCredential%2522%252C%250A%2520%2520%2520%2520%2520%2520%2522format%2522%2520%253A%2520%2522jwt_vc_json%2522%252C%250A%2520%2520%2520%2520%2520%2520%2522path%2522%2520%253A%2520%2522%2524.verifiableCredential%255B0%255D%2522%250A%2520%2520%2520%2520%257D%250A%2520%2520%257D%255D%250A%257D%2520&state=2911310d-3e45-4aa5-ba63-d93d13d5c5a5' \
-H 'accept: application/json' \
-d ''

with -H 'accept: application/json' header

The difference is that in Postman I use --header 'Content-Type: application/x-www-form-urlencoded'

Swagger, however uses -H 'accept: application/json'

When I remove the header --header 'Content-Type: application/x-www-form-urlencoded' from Postman, it fails with 415 too.

So, how can I make Swagger generate curl request with this header --header 'Content-Type: application/x-www-form-urlencoded' to make it work properly? It seems 'content: application/x-www-form-urlencoded' in api.yaml is not enough. I am missing something. Am I?

I see that in the generated VerificationApi method vp_token is annotated with @RequestPart:

@RequestPart(value = "vp_token", required = true) List<String> vpToken

in the overriden method in the controller I have put @RequestParam.

Also, in the pom.xml in the config for openapi generator, I have put:

<useRequestParamForFormData>true</useRequestParamForFormData>

Anyway, it still generates it with @RequestPart annotation.

Could you help, please?

Upvotes: 0

Views: 38

Answers (0)

Related Questions