当前位置: 首页 > 知识库问答 >
问题:

使用openapi生成器maven插件处理两种不同的响应媒体类型

赵奕
2023-03-14

我正在用OpenAPI生成器maven插件(版本为5.4.0)生成OpenAPI合同的源代码。

我正在使用java生成器和webclient库。

我有一个endpoint响应Application/octt-streamApplication/json

    "responses": {
      "200": {
        "content": {
          "application/octet-stream": {
            "schema": {
              "type": "string",
              "format": "byte"
            }
          },
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/TheResponseObject"
            }
          }
        }
      },

问题是插件只是考虑第一个媒体类型(按声明顺序)来生成相应的java返回类型。

在上面的例子中,我必须处理字节[]。

如果我首先反转媒体类型(application/json),我必须处理响应对象。

有没有办法处理这两个问题,并根据响应头获得良好的格式?


共有1个答案

丌官晨
2023-03-14

问题是:您希望从openapi生成器maven插件中得到什么结果?

其主要思想是使用以下方法生成API:

ResponseEntity<TheResponseObject> get(...) 

现在,您的模式定义endpoint可以同时返回Application/jsonbyte[],因此,从java的角度来看,API如下所示:


ResponseEntity<TheResponseObject> get(...);

ResponseEntity<byte[]> get(...);

这是不可能的,因为两种方法具有相同的签名。通常,可以通过将您自己的版本放在资源目录中并在插件配置中指定模板目录来覆盖小胡子模板(例如spring模板),但您可以获得的最佳结果如下:

ResponseEntity<java.lang.Object> get(...);

你真的需要吗?

 类似资料:
  • 我在openapi v.3规范中有一个模型。我使用openapi生成器maven插件为库webclient(spring 5-webflux)生成java客户端。我想发送回客户端文件和http头。生成的代码没有获取响应标头的方法。 为客户端生成的代码不包含提供对响应头访问的代码。例如,如果我使用库resttemplate,则有一个方法public MultiValueMap getResponse

  • 在我的Spring项目中,我使用Springdoc生成OpenApiSpecification文档。我用这些注释创建了我的Api。我想用不同的mediatype拥有相同的endpointurl来处理不同对象的POST。 生成的开放式Api规范文档为: 我有几个问题: > 终结点名称没有意义(保存\u 1) 当我使用OpenAPI生成器根据此规范生成Angular客户端时,我收到一些警告,这些警告会

  • 我们使用openapi生成器maven-plugin版本5.0.1来生成我们的API。我试图指定一个请求,包括一个DTO和一个文件。 第一个奇怪的事情是生成的代码不使用DTO,它基本上是扁平化字段,这样API就期望指定每个字段。然而,我们并不太关心这个问题,因为我们可以指定每个字段(尽管如果它像预期的那样工作会很好)。 杀死我们的问题是为应用编程接口和应用编程接口委托生成的类彼此不一致。生成的AP

  • 不幸的是,SpringFox还不支持OpenAPI3,而且,当我只想将最初的yaml公开为JSON时,使用基于反射的生成器似乎毫无意义。

  • 我从一个openapi规范(3.0.1)设计开始,用openapi生成器maven-plugin(5.1.0)生成代码,然后我使用springdoc-openapi-ui进行Spring引导(2.5.4)。 我需要手动将生成的代码中的大部分注释从io.swagger.annotations.*迁移到io.swagger.v3.oas.annotations.*https://springdoc.o

  • 我有一个模式来描述我从REST服务获得的数据。我不能改变这个计划。架构中有两个格式不同的日期时间类型字段: 默认情况下,open api generator maven插件为日期时间类型字段创建OffsetDateTime类型: 使用和,我可以将OffsetDateTime替换为LocalDateTime: 但所有领域都会发生这种替代: 有没有办法将OffsetDateTime替换为LocalDa