3

我正在使用 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

4

2 回答 2

4

看起来您的架构正在被自动生成的架构替换。尝试这个:

@Bean
public OpenApiCustomiser openApiCustomiser() {
    return openApi -> {
        var mySchema = new ObjectSchema();
        mySchema.name("MySchema");

        var schemas = openApi.getComponents().getSchemas();
        schemas.put(mySchema.getName() , mySchema);
    };
}
于 2020-10-01T15:31:25.120 回答
0

以下是如何设置全局标题的说明:

示例代码在这里:

于 2020-05-11T18:38:02.310 回答