如何通过swagger解析器从yaml获取uri req res body

时间:2018-03-07 01:26:28

标签: swagger

我想从一个昂首阔步的yaml文件中获取uri,请求,响应正文,响应代码。

然后我可以将它们放入我自己的数据库中。 像这样:

my database

我尝试通过在java程序中添加io.swagger.parser.SwaggerParser来做某事。我认为swagger codegen的方式是正确的解决方案。但是我无法从codegen的源代码中获得任何东西。

这个问题是关于解析yaml文件并获取结构。 下一个问题:How to get request body and response body in JSON from a Swagger yaml

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用解析器来解析规范文件。 然后你可以迭代你感兴趣的元素并做你想做的事。

如果您的规范输入采用Swagger 2.0格式(json或yaml),则可以使用此解析器:

<dependency>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-parser</artifactId>
    <version>1.0.34</version>
</dependency>

这是一个示例方法:

import java.util.Map;

import io.swagger.models.HttpMethod;
import io.swagger.models.Operation;
import io.swagger.models.Path;
import io.swagger.models.Response;
import io.swagger.models.Swagger;
import io.swagger.models.parameters.Parameter;
import io.swagger.parser.SwaggerParser;

public class UseParserExample {

  public static void main(String[] args) {
    Swagger swagger = new SwaggerParser().read("<path to your specification>");
    Map<String, Path> paths = swagger.getPaths();
    for (Map.Entry<String, Path> p : paths.entrySet()) {
      Path path = p.getValue();
      Map<HttpMethod, Operation> operations = path.getOperationMap();
      for (Entry<HttpMethod, Operation> o : operations.entrySet()) {
        System.out.println("===");
        System.out.println("PATH:" + p.getKey());
        System.out.println("Http method:" + o.getKey());
        System.out.println("Summary:" + o.getValue().getSummary());
        System.out.println("Parameters number: " + o.getValue().getParameters().size());
        for (Parameter parameter : o.getValue().getParameters()) {
          System.out.println(" - " + parameter.getName());
        }
        System.out.println("Responses:");
        for (Map.Entry<String, Response> r : o.getValue().getResponses().entrySet()) {
          System.out.println(" - " + r.getKey() + ": " + r.getValue().getDescription());
        }
        System.out.println("");
      }

    }
  }
} 

这是一个输出示例:

PATH: /user/{username}
Http method: PUT
Summary: Updated user
Parameters number: 2
 - username
 - body
Responses:
 - 400: Invalid user supplied
 - 404: User not found

===
PATH: /user/{username}
Http method: DELETE
Summary: Delete user
Parameters number: 1
 - username
Responses:
 - 400: Invalid username supplied
 - 404: User not found