繁体   English   中英

如何在 Spring GET 端点中以编程方式构建和返回 OpenApi 3.0 文档?

[英]How to build and return an OpenApi 3.0 Document programmatically in a Spring GET endpoint?

我有一个要求,我需要在我的微服务中有一个 GET 端点来返回一个io.swagger.v3.oas.models.OpenAPI文档,我想知道如何组合该对象。 原始形式的对象如下所示:

{
"openapi": "3.0.1",
"info": {
"title": "MY API",
"description": "API for accessing stuff and other stuff.",
"termsOfService": "http://website.com",
"contact": {
  "name": "Some chap",
  "url": "https://website.com/s/url",
  "email": "alwaysReplyAll@office.com"
},
"version": "1.0"
},
"paths": {
"/v1/user/{id}/properties": {
  "get": { ...etc etc

我试过这个,但文档刚刚出现空/空白:

@GetMapping("/openapi3")
public @ResponseBody OpenAPI swag() {
     OpenAPI swagDoc = new OpenAPI();
     GenericOpenApiContextBuilder builder = new GenericOpenApiContextBuilder();

    try {
        swagDoc = builder.buildContext(true).read();
    } catch (OpenApiConfigurationException e) {
        // handle error        
}
    return swagDoc;
}

我已经阅读了有关 springfox 的内容,但他们文档中的示例并不是很清楚……我想知道这是否有必要。 我对这个建设者做什么不对?

顺便说一句,使用 Gradle

根据评论中的讨论,您可以修改此方法,您不需要使用WebClient。 我必须在我的 swagger 服务中查看文档并使用此代码。 你不会返回一个 OpenAPI 对象,你只会返回一个字符串,因为你已经有了原始的 json。

getV2SwaggerDoc(new URL("..."));

private String getV2SwaggerDoc(URL url) throws IOException {
    HttpURLConnection connection = (HttpURLConnection)url.openConnection();

    connection.setRequestMethod(RequestMethod.GET.toString());

    BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));

    StringBuffer stringBuffer = new StringBuffer();

    String line;

    while ((line = reader.readLine()) != null)
        stringBuffer.append(line);

    reader.close();

    connection.disconnect();

    return stringBuffer.toString();
}

我能够通过利用 Spring 的 RestTemplate 而不是 Java 的低级 HTTP 库来简化已接受的答案

private String retrieveSwaggerJson(String url) {
    return new RestTemplate()
            .getForEntity(url, String.class)
            .getBody();
}

暂无
暂无

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

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