spring-boot - 如何在 Spring Boot 中使用 OpenAPI 3 Swagger 编写 @ApiResponse,它可能会返回一个类或该类的列表

标签 spring-boot swagger-ui openapi swagger-3.0

如文档中所写,如果我们想要定义多个响应,我们可以将 anyOf 与 @Schema 一起使用。

    @ApiResponse(responseCode = "201", description = "OK",
        content = @Content(schema = @Schema(anyOf = {Product.class, Activity.class})))

我的 Controller 返回 ProductList<Product> .我想在我的 OpenAPI 3 文档中指定这一点。 我想知道这是否可能。 如果是,那么如何? 如果否,那么有任何解决方法吗?

我不仅要指定 List.class .我想指定 List<Product> .

P.S.:- 在 Google 上搜索没有得到任何我可以使用的结果。

最佳答案

好吧,这是一个艰难的过程。

基本上如果你真的想返回一个对象列表或一个对象,那么你可以创建一个像这样的基本接口(interface)

public interface Response {
}

然后您可以创建实现响应的对象

public class Hello implements Response {
    private String message;

    public Hello(String message) {
        this.message = message;
    }

    public String getMessage() {
        return this.message;
    }
}

最后我们可以创建对象的列表。为此,我们需要创建一个类,它扩展 ArrayList 并实现我们的接口(interface)

public class HelloList extends ArrayList<Hello> implements Response {
}

之后我们可以将我们的模式设置为实现

@ApiResponse(responseCode = "200", description = "hello world", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Response.class)))

在客户端,您需要检查 Response-Object 的实例,以便您可以解析对象或列表

Response response = someCall();
if (response instanceof Hello) {
    System.out.println(processHello((Hello) response);
}
if (response instanceof HelloList) {
    System.out.println(processHelloList((HelloList) response);
}

此示例有效,但它非常非常复杂且令人困惑。设计 api 的更好方法是只返回列表。我看不到将一个对象或它的列表分开的好处。

关于spring-boot - 如何在 Spring Boot 中使用 OpenAPI 3 Swagger 编写 @ApiResponse,它可能会返回一个类或该类的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71211742/

相关文章:

swagger - OpenAPI/Swagger-ui : Auto-generated JSON in form ignores parameter name

swagger - 如何在OpenAPI 2.0中为同一操作定义path和formData参数?

java - Apache kafka 嵌入式 kafka junit 测试 - 当我运行单元测试时启动应用程序

java - Struts 1到 Spring 迁移-策略

java - 查询中必需的参数未在 UI 中标记

aws-cloudformation - REST API openapi 规范 AWS API Gateway 与 serverless.com 框架集成

java - 无法加载在 Docker 中运行的 Spring Boot 应用程序

Spring Boot - 类路径 list 属性

java - 无法使用 Springfox 发送授权承载 token

c# - 将 MiniProfiler 连接到 ASP.NET Core Web API Swagger