如何从 OpenAPI 3.0 yaml 文件生成 JSON 示例?
Posted
技术标签:
【中文标题】如何从 OpenAPI 3.0 yaml 文件生成 JSON 示例?【英文标题】:How to generate JSON examples from OpenAPI 3.0 yaml file? 【发布时间】:2019-09-22 11:41:13 【问题描述】:我有我的 openapi: 3.0.0 YAML 文件,我正在寻找一种从模式生成测试数据响应(JSON 对象)的方法。 This 是我正在寻找的东西,但我无法让它适用于 openapi: 3.0.0,该代码非常适用于 "swagger": "2.0" 定义。 我试图让代码与支持 OpenAPI 3.0 的 Swagger Java 库 2.x 一起使用。我知道我需要使用 Swagger 2.x 版。
import io.swagger.parser.SwaggerParser;
import io.swagger.models.*;
import io.swagger.inflector.examples.*;
import io.swagger.inflector.examples.models.Example;
import io.swagger.inflector.processors.JsonNodeExampleSerializer;
import io.swagger.util.Json;
import io.swagger.util.Yaml;
import java.util.Map;
import com.fasterxml.jackson.databind.module.SimpleModule;
// Load your OpenAPI/Swagger definition
Swagger swagger = new SwaggerParser().read("http://petstore.swagger.io/v2/swagger.json");
// Create an Example object for the Pet model
Map<String, Model> definitions = swagger.getDefinitions();
Model pet = definitions.get("Pet");
Example example = ExampleBuilder.fromModel("Pet", pet, definitions, new HashSet<String>());
// Another way:
// Example example = ExampleBuilder.fromProperty(new RefProperty("Pet"), swagger.getDefinitions());
// Configure example serializers
SimpleModule simpleModule = new SimpleModule().addSerializer(new JsonNodeExampleSerializer());
Json.mapper().registerModule(simpleModule);
// Convert the Example object to string
// JSON example
String jsonExample = Json.pretty(example);
System.out.println(jsonExample);
此代码有效,只需要为 openapi: 3.0.0 获取相同的代码即可。
【问题讨论】:
【参考方案1】:找到解决办法,
OpenAPI swagger = new OpenAPIV3Parser().read("url to Open API 3.0 Swagger")
Map < String, Schema > definitions = swagger.getComponents().getSchemas()
Schema model = definitions.get("Pet")
Example example = ExampleBuilder.fromSchema(model, definitions)
SimpleModule simpleModule = new SimpleModule().addSerializer(new JsonNodeExampleSerializer())
Json.mapper().registerModule(simpleModule)
String jsonExample = Json.pretty(example);
System.out.println(jsonExample);
【讨论】:
你好,你能添加这里使用的导入吗?【参考方案2】:import io.swagger.v3.parser.OpenAPIV3Parser;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.oas.inflector.examples.models.Example;
import io.swagger.oas.inflector.examples.ExampleBuilder;
import com.fasterxml.jackson.databind.module.SimpleModule;
import io.swagger.oas.inflector.processors.JsonNodeExampleSerializer;
import io.swagger.util.Json;
OpenAPI swagger = new OpenAPIV3Parser().read("C:\\Users\\ABC\\Downloads\\Petstore-1.0.yaml")
Map<String, Schema> definitions = swagger.getComponents().getSchemas();
Schema model = definitions.get("Pet");
Example example = ExampleBuilder.fromSchema(model, definitions);
SimpleModule simpleModule = new SimpleModule().addSerializer(new JsonNodeExampleSerializer());
Json.mapper().registerModule(simpleModule);
String jsonExample = Json.pretty(example);
System.out.println(jsonExample);
swagger 变形器的依赖
compile group: 'io.swagger', name: 'swagger-inflector', version: '2.0.0'
【讨论】:
以上是关于如何从 OpenAPI 3.0 yaml 文件生成 JSON 示例?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Gradle 中为 OpenAPI 3.0 使用 Swagger Codegen?
如何从 protobuf (.proto) 文件中生成 (.json/.yaml) 中的 swagger3 (OpenAPI3) 规范?