vert-x3 / vertx-web

HTTP web applications for Vert.x
Apache License 2.0
1.11k stars 532 forks source link

openapi-router: Unsupported media type "application/octet-stream" but OpenApi 3.1.0 supports it #2636

Open sebveit opened 1 month ago

sebveit commented 1 month ago

Version

io.vertx:vertx-web-openapi-router <= 4.5.9

Context

I encountered an exception which looks suspicious because the media type application/octet-stream is legit. io.vertx.openapi.contract.OpenAPIContractException: The passed OpenAPI contract contains a feature that is not supported: Operation createBinary defines a request body with an unsupported media type. Supported: application/json, application/json; charset=utf-8, multipart/form-data, application/hal+json

Here is a migration guide on what has changed between OpenAPI 3.0 and 3.1: https://www.openapis.org/blog/2021/02/16/migrating-from-openapi-3-0-to-3-1-0

Steps to reproduce

Have a openapi-contract.yml with the following snippet:

/api/v1/binary/{binaryId}:
  put:
    operationId: createBinary
    parameters:
      - name: binaryId
        in: path
        required: true
        schema:
          type: string
          pattern: '^[0-9a-f]{64}$'
    requestBody:
      required: true
      content:
        application/octet-stream: {}
    responses:
      '201':
        description: Resource created and stored on disk
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ResourceRefBasedUponHash'
      '409':
        description: Resource already exists
CheesyBoy123 commented 1 month ago

Hey @sebveit this is a restriction in https://github.com/eclipse-vertx/vertx-openapi/ project currently. It might be a good idea to also open an issue there.

sebveit commented 4 weeks ago

Thx for the hint! I've opened the same issue on https://github.com/eclipse-vertx/vertx-openapi/

But I guess this issue is still relevant here, since vertx-web-openapi depends on vertx-openapi?

CheesyBoy123 commented 4 weeks ago

Yup! Once it is fixed there it will flow to the openapi router as well. I see pl has started looking into it 😄