当前位置: 首页 > 知识库问答 >
问题:

证实一个大摇大摆的人

王飞虎
2023-03-14

我正在尝试验证swagger文件(实际上是我的gradle构建的一部分)。我曾经尝试过使用swagger解析器,但尽管它可以工作,如果swagger根本不进行解析,就会出现错误,但它似乎无法以这种方式捕获问题http://editor.swagger.io/#/做(这就是我要找的。)

当然,这是一个很常见的问题,一定有办法做到这一点?

我所尝试的:

build.gradle:

     compile("io.swagger:swagger-parser:1.0.31")

有一些明显问题的简单招摇:

swagger: '2.0'
info:
  description: 'This is a sample server Petstore server.'  
  version: 1.0.0
  title: Swagger Petstore
  termsOfService: http://swagger.io/terms/
  contact:
    email: apiteam@swagger.io
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
host: petstore.swagger.io
basePath: /v2
paths:
  /pet:
    post:
      tags:
      - pet
      summary: Add a new pet to the store
      description: ''
      operationId: addPet
      parameters:
      - in: body
        name: body
        description: Pet object that needs to be added to the store
        required: true
        schema:
          type: '#/definitions/Pet'
      responses:
        '405':
          description: Invalid input
      security:
      - petstore_auth:
        - write:pets
        - read:pets
definitions:
  Category:
    type: petObject
    properties:
      id:
        type: integer
        format: int64
      name:
        type: string
    xml:
      name: Category
  Pet:
    type: object
    required:
    - name
    - photoUrls
    properties:
      id:
        type: integer
        format: int64
      category:
        $ref: '#/definitions/Category'
      name:
        type: string
        example: doggie
    xml:
      name: Pet

和一个简单的类来测试它(目的是最终将它移植到gradle):

class SwaggerTest {

public static void main(String[] args) {
  SwaggerTest st = new SwaggerTest();
  st.validate();
}

private void validate() {
    try {

      String content = new String(Files.readAllBytes(Paths.get("petstore.yml")));
      SwaggerParser swaggerParser = new SwaggerParser();
      SwaggerDeserializationResult result = swaggerParser.readWithInfo(content);
      swaggerParser.parse(content);

        Swagger swagger = result.getSwagger();
        if (swagger == null) {
            System.out.println("Unable to validate swagger");
        }else {
          System.out.println("Read the swagger");
        }
        List<String> messageList = result.getMessages();
        for(String message: messageList) {
            System.out.println(message);                
        }


    } catch(Exception e) {
        System.out.println("Error!! "+ e.getMessage());
    }
}
}

上面的swagger有多个问题,正如您在http://editor.swagger.io/中看到的那样,swagger-parser没有告诉我这些问题。

共有1个答案

费学
2023-03-14

我用你的文件运行Swagger 2.0,没有任何额外的依赖关系。它可以毫无错误地工作,这是实现:

Swagger20Parser swaggerParser = new Swagger20Parser();
 类似资料:
  • 我有一个java项目(tomcat webapp)和一些REST Api。我想为他们生成大摇大摆的文档。我从本教程(github)开始。我没有maven我们使用蚂蚁任务。我加入了swagger-annotations-1.5.0。jar和所有随swagger jaxrs jar 1.5.0版本附带的jar(如果有用的话,我可以包括一个完整的列表),我已经注释了一些方法,我有一个如下的配置类: }

  • 我想大摇大摆地发布一个json正文,就像这样: 目前,我有这样的定义: 但是数据是在URL中发送的。这里是Swagger提供的生成的curl: 我知道<code>查询</code>关键字不好,但我没有找到POST JSON正文的方法。我尝试了<code>formData</code>,但没有成功。

  • 有没有人用spring-data-rest配置了swagger。我知道swagger有DocumentationConfig类,它扫描所有spring-mvc请求映射。但是,如何将其用于spring-data-rest,因为没有定义显式的请求映射。非常感谢在这方面的任何帮助。此外,我还想知道,是否有其他支持Spring-Data-REST的文档框架。

  • 我们在我们的泽西应用程序中使用了@Role允许注释来限制用户对应用编程接口某些部分的访问。我们如何在SwaggerUI中显示这些信息? 到目前为止,我已经用@ApiOperation注释了方法以显示in/out参数,并尝试使用@Authorization/@AuthorizationScope,但我只为我们不使用的oauth2显示了它。最接近out case的是ApiKeyAuthDefiniti

  • 理想情况下,我们将有一个显示所有标记为public的控制器/方法的大摇大摆的页面,以及另一个显示所有endpoint的密码安全endpoint。这可能吗?