在 Schema 中引用现有类型以获得 OpenApi 中的全局响应

问题描述

我正在尝试简化 API 错误响应,因为我总是使用相同的响应类型。

对于我的端点,我添加

 @ApiResponse(responseCode = "404",description = "Page not found",ref = "#/components/responses/problemResponse")

在我的 OpenAPI 配置中,我添加一个组件

  return new OpenAPI()
      ....
      // See https://swagger.io/docs/specification/components/
      .components(new Components().addResponses("problemResponse",new ApiResponse()
          .description("Problem Response")
          .content(new Content().addMediaType(
            APPLICATION_JSON_VALUE,new MediaType().schema(new Schema().$ref(ProblemResponse.class.getName()))
            )
          )
        )
      )
     ..;
  }

我看到引用在端点一侧起作用,但引用现有类型 (class ProblemResponse) 似乎根本不起作用。

问题

如何在 OpenAPI 的架构定义中引用(就指向而言)现有的 type (class,primitive,enum)

我尝试过的

我可以让它在原地工作

 @Content(mediaType = APPLICATION_JSON_VALUE,schema = @Schema(implementation = ProblemResponse.class))

并尝试使用

new Schema<ProblemResponse>()

有趣的是当我添加

 @ApiResponse(responseCode = "400",description = "Bad request",content = {
      @Content(schema = @Schema(implementation = ProblemResponse.class))
    })

一个端点一次,实际的全局定义开始工作,所以我引用的每个其他端点

ref = "#/components/responses/problemResponse"

现在将正确显示。这意味着之前,ProblemResponse 不是已知模式的一部分,我通过使用 @Content 引入了它?我将如何以正确的方式做到这一点?

我尝试在 @Schema(name = "ProblemResponse") 类上添加 ProblemResponse 以强制将其作为已知架构引入,因为它尚未在任何端点中用作“响应结果”,这可能是原因我失踪了 - 但这也无济于事。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)