gpt4 book ai didi

java - Springfox/Swagger 不解析多态字段

转载 作者:行者123 更新时间:2023-11-30 01:51:55 27 4
gpt4 key购买 nike

我有一个简单的 Spring Boot 应用程序,它有一个 REST 端点来返回一个“Job”对象,该对象包含一系列多态性,旁边还有其他内容。我们采用“代码优先”方法并尝试创建 API 模型来满足我们的需求。但生成的 Api 文档并不代表我们模型的全部复杂性,因为它无法解析多态列表。

Job 对象看起来像

@Data // Lombok Getters and Setters
public final class Job {
private String foo;
private String bar;
private List<Condition> conditionList;
}

Condition 是一组不同条件的父对象

public abstract class Condition {

}

条件的两个示例实现是

@Data
public final class Internal extends Condition {
private String nodeId;
}

@Data
public final class Timed extends Condition {
private ZonedDateTime timestamp;
}

REST Controller 非常简单:

@RestController
@RequestMapping("/hello")
public class MyController {

@GetMapping
public ResponseEntity<Job> getJob() {
return new ResponseEntity<>(new Job(), HttpStatus.OK);
}
}

现在,当我打开 Swagger UI 并查看生成的定义时,元素 conditionList 是一个空对象 {}

我尝试在分类上使用@JsonSubTypes和@ApiModel,但输出没有任何区别。我可能没有正确使用它们,或者 Swagger 无法完成工作,或者我只是盲目或愚蠢。

如何让 Swagger 将子类型包含到生成的 api 文档中?

最佳答案

我们通过改变结构“解决”了这个问题。所以这更像是一种解决方法。

我们现在使用“容器”类,而不是使用多态列表,该类包含每种类型作为其自己的类型。

Condition 对象变成了“容器”或“管理器”类,而不是列表。在 Job 类中,该字段现在定义为:

private Condition condition;

Condition 类本身现在是

public final class Condition{
private List<Internal> internalConditions;
// etc...
}

例如,Internal 丢失了它的父类型,现在只是

public final class Internal{
// Logic...
}

Swagger 生成的 JSON 现在看起来像这样(摘录):

"Job": {
"Condition": {
"Internal": {
}
"External": {
}
//etc...
}
}

关于java - Springfox/Swagger 不解析多态字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55728949/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com