如文档中所写,如果我们想要定义多个响应,我们可以将 anyOf 与 @Schema 一起使用。
@ApiResponse(responseCode = "201", description = "OK",
content = @Content(schema = @Schema(anyOf = {Product.class, Activity.class})))
我的 Controller 返回 Product
或 List<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/