首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用openapi生成器-maven-plugin处理两种不同的响应媒体类型

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

Stack Overflow用户
提问于 2022-07-12 15:18:56
回答 2查看 385关注 0票数 0

我正在使用OpenAPI maven插件(版本5.4.0)生成openapi-generator-maven-plugin合同的源代码。

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

我有一个端点响应application/octet-streamapplication/json

代码语言:javascript
复制
    "responses": {
      "200": {
        "content": {
          "application/octet-stream": {
            "schema": {
              "type": "string",
              "format": "byte"
            }
          },
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/TheResponseObject"
            }
          }
        }
      },

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

有了上面的例子,我必须处理byte[]

如果我反转媒体类型(首先是application/json),我必须处理TheResponseObject

是否有一种方法可以同时处理它们并根据响应头获得良好的格式?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-13 06:44:55

为了处理这个问题,我已经将合同更改为始终在响应中处理byte[]

代码语言:javascript
复制
        "content": {
          "application/plain": {
            "schema": {
              "type": "string",
              "format": "byte"
            }
          },

然后,我不是调用api.theEndpoint(...),而是调用api.theEndpointWithHttpInfo(...),它将返回一个ResponseEntity<byte[]>对象。

根据内容类型,我可以选择如何处理结果:

代码语言:javascript
复制
        if (MediaType.APPLICATION_JSON.isCompatibleWith(reponse.getHeaders().getContentType())) {
            // parse json response (reponse.getBody()) 
        } else {
            // it's a pdf 
        }
票数 0
EN

Stack Overflow用户

发布于 2022-07-12 15:36:54

问题是:您期望从openapi-generator-maven-plugin得到什么结果?

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

代码语言:javascript
复制
ResponseEntity<TheResponseObject> get(...) 

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

代码语言:javascript
复制
ResponseEntity<TheResponseObject> get(...);

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

这是不可能的,因为这两种方法都有相同的签名。通常,可以通过在mustache目录中放置自己的版本并在插件配置中指定templateDirectory来覆盖resources模板(例如弹簧模板),但最好的方法是:

代码语言:javascript
复制
ResponseEntity<java.lang.Object> get(...);

你真的需要那个吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72954680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档