【问题标题】:Swagger/Openapi-Annotations: How to produce allOf with $ref?Swagger/Openapi-Annotations:如何使用 $ref 生成 allOf?
【发布时间】:2019-08-12 10:27:09
【问题描述】:

我正在生成 Rest 端点,包括向生成的代码添加 Openapi/Swagger 注释。

虽然它适用于基本类型,但我对自定义类有一些问题。

现在我有很多自定义类的重复架构条目(使用 @Schema(implementation = MyClass.class)),但至少需要的信息在那里。不过,我想找到一种方法来删除重复的架构条目,同时保留其他信息。

在讨论 $ref 和缺少 兄弟属性 的 github 问题上,我发现 an example 如何在 yaml 中手动编写以获得结果我正在寻找,但我不知道如何设置注释来生成它。

这就是我认为如果我遵循example 的注释应该是这样的(为了安全起见,它被添加到getter 和setter 中):

  import io.swagger.v3.oas.annotations.media.Schema;

  ...
public class SepaPaymentRequest {
  ...

  @Schema(name = "w307BetrBeg", description = "BETRAG BEGUENSTIGTER ", allOf = { com.diesoftware.services.utils.Betrag.class }, required = true)
  public void setW307BetrBeg(final Betrag w307BetrBeg) {
    this.w307BetrBeg = w307BetrBeg;
  }

  ...
}

但是当我获取 openapi.yaml (sn-p) 时我得到了什么:

    w307BetrBeg:
      $ref: '#/components/schemas/Betrag'

我想要什么:

    w307BetrBeg:
      title: 'Betrag'
      description: 'BETRAG BEGUENSTIGTER'
      allOf:
        - $ref: '#/components/schemas/Betrag'

任何提示都非常受欢迎。

【问题讨论】:

  • 你有没有得到这个答案?
  • 目前还没有,大约一个月前打开了issue。那边也安静。

标签: java swagger openapi


【解决方案1】:

我还没有找到使用注释的方法,即通过注释类。


我认为可以这样做,通过:

  • 创建模型
  • 使用 ModelConverter 注入模型

当我说“模型”时,我指的是io.swagger.v3.oas.models.media.Schema 的一个实例。

我认为您特别想创建和注入一个支持allOf 的io.swagger.v3.oas.models.media.ComposedSchema 实例。

这样做(即创建模型实例)与手写 YAML 没有太大区别。


另一种可能性——我没有尝试过——可能是编写一个稍微不同的 ModelConverter,您将其安装到转换器链中。然后,拦截对resolve 的调用,该调用返回一个其name 为Betrag 的SchemaObject,并且(有时?)将其替换为使用allOf 的ComposedSchema 实例。

【讨论】:

    猜你喜欢
    • 2021-11-14
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 2022-10-05
    • 2020-02-29
    • 2020-02-17
    • 2015-01-16
    • 1970-01-01
    相关资源
    最近更新 更多