我正在尝试创建一个进程,该进程采用外部系统创建的 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
对象中的字段。举个例子,它看起来像:
"components" : {
"schemas" : {
"something" : {
"minLength" : 1,
"maxLength" : 10,
"type" : "string",
"types" : [ "string" ],
"extensions" : {
"x-whatever" : true
}
}
...
我尝试使用一些自定义 mixin 构建自己的 ObjectMapper 来隐藏/修改这些问题,但它变得非常复杂。
那么如何将 OpenAPI 对象序列化为文件,以便可以由 Swagger 自己的 OpenAPIParser 再次解析呢?
确保您使用正确的 Swagger 包中的
Json.pretty()
:
io.swagger.v3.core.util
Json31.pretty()
来自 io.swagger.v3.core.util
; 请参阅此处了解 OAS 3.1 与 3.0(反)序列化的差异io.swagger.util