【问题标题】:How to get OpenApi Generator for Spring Java server generate ResponseEntity<Object> for PUT request?如何为 Spring Java 服务器获取 OpenApi Generator 为 PUT 请求生成 ResponseEntity<Object>?
【发布时间】:2020-10-28 15:27:12
【问题描述】:

我正在使用 4.3.1 版本的 openapi-generator-maven-plugin 在 Java 11 中生成 SpringBoot 服务器。

对于 PUT 请求,我希望能够在成功时将 URI 返回到创建/更新的对象,并在不成功时返回带有问题信息的纯文本。

我的 API json 包含以下 PUT 请求内容:

"put": {
        "summary": "Create or update a Service",
        "deprecated": false,
        "operationId": "putIndividualServiceUsingPUT",
        "responses": {
          "200": {
            "description": "Service updated"
          },
          "201": {
            "description": "Service created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string",
                  "example": "services/DroneIdentifier"
                }
              }
            }
          },
          "400": {
            "description": "Provided service is not correct",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string",
                  "example": "Service is missing required property version"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "parameters": [
          {
            "name": "serviceName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "DroneIdentifier"
          }
        ],
        "requestBody": {
          "description": "Service to create/update",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/service"
              }
            }
          }
        }

生成的 API:

    /**
     * PUT /services/{serviceName} : Create or update a Service
     *
     * @param serviceName  (required)
     * @param service Service to create/update (required)
     * @return Service updated (status code 200)
     *         or Service created (status code 201)
     *         or Provided service is not correct (status code 400)
     *         or Unauthorized (status code 401)
     *         or Forbidden (status code 403)
     */
    @ApiOperation(value = "Create or update a Service", nickname = "putIndividualServiceUsingPUT", notes = "", tags={ "rAPP Catalogue API", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "Service updated"),
        @ApiResponse(code = 201, message = "Service created", response = String.class),
        @ApiResponse(code = 400, message = "Provided service is not correct", response = String.class),
        @ApiResponse(code = 401, message = "Unauthorized"),
        @ApiResponse(code = 403, message = "Forbidden") })
    @RequestMapping(value = "/services/{serviceName}",
        produces = { "text/plain" }, 
        consumes = { "application/json" },
        method = RequestMethod.PUT)
    default ResponseEntity<Void> putIndividualServiceUsingPUT(@ApiParam(value = "",required=true) @PathVariable("serviceName") String serviceName,@ApiParam(value = "Service to create/update" ,required=true )  @Valid @RequestBody Service service) {
        return getDelegate().putIndividualServiceUsingPUT(serviceName, service);
    }

但是,该方法的返回类型是ResponseEntity&lt;Void&gt;,这意味着我无法在响应正文中放入任何内容。

我做错了吗?还是生成器被硬编码为不允许在 PUT 请求的响应中使用主体?

【问题讨论】:

标签: java spring-boot code-generation openapi


【解决方案1】:

生成的代码模板以 .mustache 格式存储为资源。但是,如果您有 Maven 或 Gradle,您可以通过创建具有相同名称的修改文件并添加指向该文件夹的链接来轻松覆盖它。

在您的情况下,将 api.mustache 和 methodBody.mustache 文件从 https://github.com/OpenAPITools/openapi-generator/tree/master/modules/openapi-generator/src/main/resources/Java 复制到您的计算机或项目资源中,并通过将 Response&lt;&gt; 替换为 URI 来更改它们。

添加项目&lt;templateResourcePath&gt;folderInYourResources&lt;/templateResourcePath&gt;&lt;templateDirectory&gt;pathToDirectory&lt;/templateDirectory&gt; 进入你的 Maven &lt;configuration&gt;,一切都应该工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-27
    • 1970-01-01
    • 2019-12-07
    • 2021-07-29
    • 2022-07-23
    • 2021-08-15
    • 2022-08-19
    • 2022-12-29
    相关资源
    最近更新 更多