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

OpenAPI在嵌套类型中返回null

戚兴思
2023-03-14

我有由OpenAPI制作的带有Mybatis和Rest API的SpringBoot应用程序,这是我的swagger文件:

 /api/v1/getdata:
    get:
      summary: ttttttt
      tags:
        - "API"
      description: ttttttt
      operationId: getdata
      parameters:
        - name: sap
          in: header
          required: true
          description: ttttttt
          schema:
            type: string
        - name: created
          in: header
          required: true
          description: ttttttt
          schema:
            type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MyResponse'
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MyResponse'

components:
  schemas:    
    MyResponse:
        description: ttttttt
        type: object
        properties:
        code:
            description: ttttttt
            type: string
        body:
            $ref: '#/components/schemas/MyMetaData'
    
    MyMetaData:
      description: ttttttt
      type: object
      properties:
        id:
          description: id
          type: string
        somedata:
          description: ttttttt
          $ref: '#/components/schemas/MyData'
    
    MyData:
      description: ttttttt
      type: object
      properties:
        id:
          description: id
          type: string
        group:
          description: ttttttt
          type: string

这是我的控制器代码:

@Override
public ResponseEntity<MyResponse> getdata(String sap, String created) {
    MyResponse myResponse = new MyResponse();
    try {
        OffsetDateTime date = OffsetDateTime.parse(created, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
        Optional<MyMetaData> optionalMetaData = Optional.ofNullable(this.MyMetaDataMapper.getdata(sap, date));
        if (optionalMetaData.isPresent()) {
            myResponse.setBody(optionalMetaData.get());
            myResponse.setCode("OK");
        }
        return ResponseEntity.status(HttpStatus.OK).body(myResponse);
    } catch (Exception e) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(myResponse);
    }
}

以下是生成的模型:

@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2022-03-01T12:24:46.999519+03:00")
public class MyMetaData   {
  @JsonProperty("id")
  private String id = null;

  @JsonProperty("somedata")
  private MyData somedata = null;

  public MyMetaData id(String id) {
    this.id = id;
    return this;
  }

当我像这样使用time-MyData时,结果得到null:

  somedata:
      description: ttttttt
      $ref: '#/components/schemas/MyData'

当一些数据是字符串类型时,我从数据库中获取一些正常数据。这里使用对象类型的正确方法是什么?

共有1个答案

何章横
2023-03-14

您共享的OpenAPI swagger文件有$ref:'#/组件/模式/MyData',但组件模式在MyData的路径中丢失。

按Open API留档应该是

components:
  schemas:
    User:    # Schema name
      type: object
      properties:
        id:
          type: integer
          format: int64
          example: 1          # Property example
        name:
          type: string
          example: New order  # Property example

对于嵌套对象,已经有一个StackOverflow问题可能会有所帮助。Github问题。

你可以试试类似的

components:
  schemas:
    MyMetaData:
      type: object
      description: ttttttt
      properties:
        id:
          description: id
          type: string
        somedata:
          description: ttttttt
          $ref: '#/components/schemas/MyData'
    MyData:
      type: object
      description: ttttttt
      properties:
        id:
          description: id
          type: string  

如果您仍然面临OpenAPI swagger的问题,您可以尝试SpringDoc。它支持OpenAPI 3并轻松生成Swagger留档。您可以在网上找到很多示例。

示例:

 类似资料:
  • 本页包含内容: 嵌套类型实例 嵌套类型的引用 枚举类型常被用于实现特定类或结构体的功能。也能够在有多种变量类型的环境中,方便地定义通用类或结构体来使用,为了实现这种功能,Swift允许你定义嵌套类型,可以在枚举类型、类和结构体中定义支持嵌套的类型。 要在一个类型中嵌套另一个类型,将需要嵌套的类型的定义写在被嵌套类型的区域{}内,而且可以根据需要定义多级嵌套。 嵌套类型实例 下面这个例子定义了一个结

  • 我正在寻找一种方法来返回嵌套在泛型类中的枚举类型。我的意思是: 换句话说,我的方法应该返回嵌套在泛型类型中的枚举,有没有办法在Java中实现这一点?

  • 我正在努力返回嵌套在函数中的一个promise(或多个promise),该函数嵌套在函数中。 我认为最好通过查看代码来缠绕你的头,所以这里是:

  • 实际上,我试图在我的代码中实现如此基本的东西。我有一个json文件。然后我想读取这个json文件并将其转换为Java对象。为了处理它,我使用了gson,但不知何故,它为嵌套对象返回null。 JSON: TestJSON: 最后,我尝试从json文件中读取它: 但是最后,当我试图到达时,它给出了null。有什么建议吗?

  • 问题内容: 我有以下查询: 这将同时返回“匹配”对象(整个文档)和“ inner_hits”对象(嵌套在匹配内部)。 有没有办法让我只返回出现在“ inner_hits”结果中的匹配“查询”元素,而没有获取整个文档? 问题答案: 应该可以通过以下方式 在顶层 禁用source- field 来实现

  • 我有以下对象初始化。它是RestfulService类的一部分。 它在类中使用了几次,但有不同的参数。例如。 更新... 我的尝试是这样的。这种工作。然而,它现在只映射到一个通用的LinkedList。忽略对象类型。