将 swagger-parser 创建的 OpenAPI 对象序列化到规范文件

问题描述 投票:0回答:1

我正在尝试创建一个进程,该进程采用外部系统创建的 OpenAPI 规范文件,执行一些修改以使它们作为 Spring API 更好地工作,然后写入生成的文件,然后由 openapi-generator 使用来创建API 和模型类。

我使用 swagger-parser 来读取原始文件,并且可以对生成的 OpenAPI 对象进行更改。我尝试了几种将这些对象序列化为 JSON 文件的方法,但是 openapi-generator 在解析这些文件时遇到了问题。

一般来说,代码是这样的:

SwaggerParseResult result = new OpenAPIParser().readLocation( INPUT_FILE, null, null );
OpenAPI openAPI = result.getOpenAPI();

// at this point, result.getMessages() is an empty list

/* ... tweak the API description ... */

String rawData = Json.pretty(openAPI);
try {
  FileUtils.writeStringToFile( OUTPUT_FILE, rawData, Charset.defaultCharset() );
} catch (IOException e) {
  throw new RuntimeException("Error writing file", e);
}

Json.pretty
是Swagger自己的Json类,用于序列化OpenAPI对象。

我看到的验证错误包括:

  • 模式最终都会有
    type
    属性(字符串)和
    types
    (字符串数组)。
  • 对象上的扩展字段(例如,
    x-whatever
    )将被渲染为
    extensions
    对象中的字段。
  • OpenAPI 对象上的一些额外内部字段最终出现在 JSON 中

举个例子,它看起来像:

  "components" : {
    "schemas" : {
      "something" : {
        "minLength" : 1,
        "maxLength" : 10,
        "type" : "string",
        "types" : [ "string" ],
        "extensions" : {
          "x-whatever" : true
        }
      }
...

我尝试使用一些自定义 mixin 构建自己的 ObjectMapper 来隐藏/修改这些问题,但它变得非常复杂。

那么如何将 OpenAPI 对象序列化为文件,以便可以由 Swagger 自己的 OpenAPIParser 再次解析呢?

java swagger openapi
1个回答
0
投票

确保您使用正确的 Swagger 包中的

Json.pretty()

  • OpenAPI 3.0 →
    io.swagger.v3.core.util
  • OpenAPI 3.1 →
    Json31.pretty()
    来自
    io.swagger.v3.core.util
    请参阅此处了解 OAS 3.1 与 3.0(反)序列化的差异
  • OpenAPI 2.0 →
    io.swagger.util
© www.soinside.com 2019 - 2024. All rights reserved.