2

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

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

我的控制器返回 aProduct或 a List<Product>。我想在我的 OpenAPI 3 文档中指定这一点。我想知道这是否可能。如果是,那么如何?如果否,那么是否有任何解决方法?

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

PS:- 在谷歌上搜索并没有得到任何我可以使用的结果。

4

1 回答 1

2

好的,这是一个艰难的。

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

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 并实现我们的接口

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 response = someCall();
if (response instanceof Hello) {
    System.out.println(processHello((Hello) response);
}
if (response instanceof HelloList) {
    System.out.println(processHelloList((HelloList) response);
}

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

于 2022-03-02T21:59:06.017 回答