【问题标题】:SpringDoc - How to Add schemas programmaticallySpringDoc - 如何以编程方式添加模式
【发布时间】:2020-08-26 23:08:53
【问题描述】:

我正在使用 SpringDoc 并尝试以编程方式将架构添加到 OpenApi,但没有成功。

    @Bean
public OpenAPI customOpenAPI() {
     Schema mySchema = new Schema<Object>();
     mySchema
     .type("object")
     .$ref("#/components/schemas/MySchema")
     .name("MySchema")
     .addProperties("testStr", new StringSchema());

      return new OpenAPI()
            .servers(servers)
            .info(new Info().title(title).version(version).description(description))
            .components(new Components()
                    .addSchemas("MySchema" , mySchema)
            )
            .tags(tags);
}

mySchema 的描述未添加到我在生成的 YAML 文件中看到的模式列表中,如果我尝试引用它:

apiResponses.entrySet().forEach(response -> response.getValue().addHeaderObject("XxX", 
                  new Header().$ref("#/components/schemas/MySchema")));

swagger UI 中显示以下错误:

解析器错误 路径./XX/v1/test/status/{entry}.get.responses.404.headers.XxX.$ref 无法解析引用:无法解析指针: /components/schemas/MySchema

拜托,你能帮我理解一下吗?

编辑: 我正在使用版本1.3.9

【问题讨论】:

    标签: spring-boot schema springdoc springdoc-openui


    【解决方案1】:

    您的架构似乎正在被自动生成的架构替换。试试这个:

    @Bean
    public OpenApiCustomiser openApiCustomiser() {
        return openApi -> {
            var mySchema = new ObjectSchema();
            mySchema.name("MySchema");
    
            var schemas = openApi.getComponents().getSchemas();
            schemas.put(mySchema.getName() , mySchema);
        };
    }
    

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 谢谢。无论如何,我尝试了这种方法并且它有效。我想知道如果我需要添加一个不用于参数/标头的架构怎么办?
      • @R.S,您还打算在哪里重复使用这些模式?在 API 响应中?
      • @Debargha Roy,是的,例如。我不喜欢的另一个方面是 swagger 编辑器不显示模式标题。
      猜你喜欢
      • 2015-05-01
      • 2016-11-23
      • 2012-09-16
      • 2014-07-03
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多