首页 > 解决方案 > Swagger 客户端问题:服务是否产生不一致的 JSON/XML 或者我做错了什么?

问题描述

我正在尝试使用使用 Swagger 的第三方 Web 服务,它声称可以生成 XML 和 JSON。

太好了,我希望我可以将swagger-codegen-maven-plugin指向swagger.json,转动手柄并生成客户端。

但是,当我使用生成的代码运行简单查询时,结果对象为空。当我启用调试时,我可以看到查询正在生成来自 Web 服务的响应,但它没有被映射到我的模型类中的列表中。

swagger 文档展示了如何在 JSON 和 XML 模式下运行它。

XML看起来像:

curl -X GET --header 'Accept: application/xml' 'https://blah/renderings'

(省略安全性)产生类似的东西:

<renderings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="blahschema.xsd">
  <rendering>standard</rendering>
</renderings>

JSON看起来像:

curl -X GET --header 'Accept: application/json' 'https://blah/renderings'

这会产生类似的东西:

{
  "rendering": [
    "standard",
  ]
}

以上对我来说看起来不对? 由于我对 JSON 的有限理解,我相信这是“未包装的”,但是,我希望数据数组在 JSON 版本中被称为“渲染”——这似乎是代码生成模型类中的名称(例如,使用okhttp-gson 客户端“渲染”在 @SerializedName 注释中指定)。

据我所知,以下是 swagger.json 的相关部分。

"WSRenderingsList" : {
  "type" : "object",
  "properties" : {
    "renderings" : {
      "type" : "array",
      "xml" : {
        "name" : "rendering"
      },
      "items" : {
        "type" : "string",
        "xml" : {
          "name" : "rendering"
        }
      }
    }
  },
  "xml" : {
    "name" : "renderings"
  }
},

我做错了什么还是服务产生了不一致的结果?

或者,如何在我的 Swagger 代码生成中指定我想优先访问 XML 数据而不是 JSON 版本?

这是一个五花八门的网络服务,如果可以避免的话,我宁愿不手工制作客户端。

标签: javajsonxmlswaggeropenapi

解决方案


我已经联系了供应商,他们同意问题出在他们的网络服务上。


推荐阅读