【问题标题】:Swagger in Loopback 4 - using @property decorator to represent nested objectsLoopback 4 中的 Swagger - 使用 @property 装饰器来表示嵌套对象
【发布时间】:2019-09-02 20:36:17
【问题描述】:

TL;DR
如何创建包含嵌套对象的模型而不为每个对象类型的属性创建新模型?

LB4 和 Typescript 的新手,如果这是一个 obv 问题,我们深表歉意。我想创建一个模型,它代表一个响应,其中包括我的端点的嵌套对象。这是一个示例响应:

{
  "result": {
    "prop1": "blah blah",
    "prop2": {
      "subProp": {
        "subSubProp": "blah blah"
      }
    }
  }
}

我遇到的问题是表示模型中的嵌套对象。理想情况下,我会这样做:

@model()
export class MyResponseModel extends Model {
  @property({
    type: 'object'
  })
  result: {
    prop1: string,
    prop2: {
      subProp: {
        subSubProp: string
      }
    }
  }
}

然后在我的控制器中,我将其设置为响应类型:

@post('/my-endpoint', {
  responses: {
    ...,
    schema: {
      'x-ts-type': MyResponseModel,
    }
  }
})
async post(): Promise<MyResponseModel>{...}

到目前为止,我完成这项工作的唯一方法是为每个嵌套对象创建一个模型,即一个模型用于“结果”,另一个用于“prop2”,另一个用于“subProp”,这感觉不是正确的方法执行这个?在 LB3 中,您似乎可以指定“属性”道具来定义也可以具有子对象的子对象。

同样的 q 要求 LB3,但没有回答 LB4:loopback model with object

在 google 群里提问没有回答:https://groups.google.com/forum/?nomobile=true#!topic/loopbackjs/AKgZT6V-pCc

提前致谢!

【问题讨论】:

    标签: swagger swagger-ui loopback openapi loopback4


    【解决方案1】:

    如何创建包含嵌套对象的模型而不为每个对象类型的属性创建新模型?

    同样的 q 要求 LB3,但没有回答 LB4:loopback model with object

    您的 LB3 问题的答案中描述的解决方案应该适用于 LoopBack 4。

    @model()
    export class MyResponseModel extends Model {
      @property({
        type: {
          prop1: 'string',
          prop2: {
            type: {
              subSubProp: 'string'
            }
          }
        }
      })
      result: {
        prop1: string,
        prop2: {
          subProp: {
            subSubProp: string
          }
        }
      }
    }
    

    简写符号也应该起作用:

    @model()
    export class MyResponseModel extends Model {
      @property({
        prop1: 'string',
        prop2: {
          subSubProp: 'string'
        }
      })
      result: {
        prop1: string,
        prop2: {
          subProp: {
            subSubProp: string
          }
        }
      }
    }
    

    【讨论】:

    • 功能上它确实有效,但招摇浏览器不显示子道具,即您只会看到示例响应为result: {},就是这样
    • @ahb 我猜这意味着从 LB4 模型定义构建 JSON/OpenAPI Schema 的代码还不支持嵌套模型。你能打开一个新的功能请求吗? github.com/strongloop/loopback-next/issues/…
    猜你喜欢
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 2018-12-16
    • 2017-01-25
    • 2021-12-05
    • 2011-08-18
    相关资源
    最近更新 更多