简体   繁体   English

如何从 OpenAPI 3.0 yaml 文件生成 JSON 示例?

[英]How to generate JSON examples from OpenAPI 3.0 yaml file?

I have my openapi: 3.0.0 YAML file, I'm looking for a way to generate test data response (JSON object) from schema.我有我的 openapi: 3.0.0 YAML 文件,我正在寻找一种从模式生成测试数据响应(JSON 对象)的方法。 This is what I am looking for, but I can't get it working for openapi: 3.0.0, the code works perfectly for "swagger": "2.0" definitions.就是我要找的,但我不能让它在 openapi: 3.0.0 上工作,代码非常适合“swagger”:“2.0”定义。 I have tried to get the code working with Swagger Java libraries 2.x, which support OpenAPI 3.0.我试图让代码与支持 OpenAPI 3.0 的 Swagger Java 库 2.x 一起使用。 I know I need to use version 2.x of Swagger.我知道我需要使用 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);

This code is working, just need to get the same code working for openapi: 3.0.0.此代码正在运行,只需要为 openapi: 3.0.0 获取相同的代码。

Found the solution,找到了解决办法,

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);
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);

Dependency for swagger inflector对 swagger inflector 的依赖

compile group: 'io.swagger', name: 'swagger-inflector', version: '2.0.0'

I have my openapi: 3.0.0 YAML file, I'm looking for a way to generate test data response (JSON object) from schema.我有我的openapi:3.0.0 YAML文件,我正在寻找一种从架构生成测试数据响应(JSON对象)的方法。 This is what I am looking for, but I can't get it working for openapi: 3.0.0, the code works perfectly for "swagger": "2.0" definitions.是我想要的,但是我无法在openapi:3.0.0上使用它,该代码对于“ swagger”:“ 2.0”定义非常有效。 I have tried to get the code working with Swagger Java libraries 2.x, which support OpenAPI 3.0.我试图使代码与支持OpenAPI 3.0的Swagger Java库2.x一起使用。 I know I need to use version 2.x of Swagger.我知道我需要使用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);

This code is working, just need to get the same code working for openapi: 3.0.0.这段代码有效,只需要为openapi获得相同的代码即可:3.0.0。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM