Skip to content

Generated REST API interface method return type depends on order of content types #284

Description

@jsenko

Given the following operation:

"/admin/export": {
  "get": {
    "description": "Exports registry data as a ZIP archive.",
    "operationId": "exportData",
    "parameters": [
      {
        "description": "Indicates if the operation is done for a browser.  If true, the response will be a JSON payload with a property called `href`.  This `href` will be a single-use, naked download link suitable for use by a web browser to download the content.",
        "in": "query",
        "name": "forBrowser",
        "schema": {
          "type": "boolean"
        }
      }
    ],
    "responses": {
      "200": {
        "content": {
          "application/zip": {
            "schema": {
              "$ref": "#/components/schemas/FileContent"
            }
          },
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/DownloadRef"
            }
          }
        },
        ...
      },
      ...
    },
    ...
  },
  ...
}

the generated method is:

/**
 * <p>
 * Exports registry data as a ZIP archive.
 * </p>
 * 
 */
@Path("/export")
@GET
@Produces({"application/json", "application/zip"})
Response exportData(@QueryParam("forBrowser") Boolean forBrowser);

If we reverse the order of the content types:

"/admin/export": {
  "get": {
    "description": "Exports registry data as a ZIP archive.",
    "operationId": "exportData",
    "parameters": [
      {
        "description": "Indicates if the operation is done for a browser.  If true, the response will be a JSON payload with a property called `href`.  This `href` will be a single-use, naked download link suitable for use by a web browser to download the content.",
        "in": "query",
        "name": "forBrowser",
        "schema": {
          "type": "boolean"
        }
      }
    ],
    "responses": {
      "200": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/DownloadRef"
            }
          },
          "application/zip": {
            "schema": {
              "$ref": "#/components/schemas/FileContent"
            }
          }
        },
        ...
      },
      ...
    },
    ...
  },
  ...
}

the generated method is:

/**
 * <p>
 * Exports registry data as a ZIP archive.
 * </p>
 * 
 */
@Path("/export")
@GET
@Produces({"application/json", "application/zip"})
DownloadRef exportData(@QueryParam("forBrowser") Boolean forBrowser);

JSON is semantically equivalent if any of the map keys are reordered, so the generator should always generate the first method.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    type/bugIssues deemed to be bugs/flaws in the software.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions