提问人:Sebu 提问时间:11/6/2023 更新时间:11/7/2023 访问量:37
如何在springdoc-openapi中拥有真正的应用程序生成的响应模式?
How to have the real application-produced response schema in springdoc-openapi?
问:
我有一个 Spring Boot 项目用于创建 openapi 规范并显示 Swagger UI。该项目还使用 Jackson 以 JSON 格式序列化数据。Jackson 配置为理解类型并将它们序列化为字符串(请参阅下面的配置)。但是,在运行项目并查看 Swagger UI 时,openapi 计算的响应架构与实际序列化不同。在以下两个代码片段中,可以看到字段的差异,其类型为 。另请注意,字段的架构计算有效,其类型为 。springdoc-openapi-starter-webmvc-ui
java.time
@Bean ObjectMapper
test2
java.time.YearMonth
test1
java.time.Instant
实际响应:
{
"test1": "2023-11-06T10:53:42.781130500Z",
"test2": "2023-11"
}
openapi 的响应架构:
{
"test1": "2023-11-06T10:53:42.788Z",
"test2": {
"year": 0,
"month": "JANUARY",
"monthValue": 0,
"leapYear": true
}
}
这是控制器:
@RestController
public class TestController {
@GetMapping("/test")
public TestDto testDto() {
TestDto testDto = new TestDto();
testDto.setTest1(Instant.now());
testDto.setTest2(YearMonth.now());
return testDto;
}
}
这是模型类:
@Data
public class TestDto {
private Instant test1;
private YearMonth test2;
}
和配置:ObjectMapper
@Bean
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
return objectMapper;
}
我知道我可以做到以下几点:
@Data
public class TestDto {
private Instant test1;
@Schema(type = "string", format = "yearmonth", example = "2020-07")
private YearMonth test2;
}
这将起作用:在 openapi-specification 中,架构将如下所示:
{
"test1": "2023-11-06T11:13:56.750Z",
"test2": "2020-07"
}
这正是我想要的。但是,我不想手动添加此注释,因为这可能会影响多个类中的多个字段。我希望 openapi 规范具有我的应用程序生成的确切响应架构。我怎样才能做到这一点?@Schema
这是一个 MWE:https://github.com/SebastianOltmanns/springdoc-jackson
答: 暂无答案
评论