我有一个使用 Spring 控制器手动编写的现有服务,我正在尝试使用 OpenAPI Generator 迁移到该服务。我遇到了以下阻塞问题:
LocalDate
LocalDateTime
ZonedDateTime
date
date-time
LocalDate
和 OffsetDateTime
。生成器可以配置为用 OffsetDateTime
替换 ZonedDateTime
,例如:typeMappings.set(mapOf("DateTime" to "ZonedDateTime"))
importMappings.set(mapOf("ZonedDateTime" to "java.time.ZonedDateTime"))
LocalDateTime
的现有 API,它们没有留下兼容的数据类型。它们必须配置为 date
(LocalDate
) 或 date-time
(ZonedDateTime
),对于期望并尝试反序列化 LocalDateTime
的客户端来说,这两种格式都没有兼容的有线格式。我知道
LocalDateTime
对于 API 来说是一种不好的数据类型,因为它缺乏明确的时区,但这阻止了我将服务迁移到使用 OpenAPI Generator。我能想到的唯一解决方法是将 LocalDateTime
属性视为简单的 string
。有没有更好的解决方法可以让我继续使用LocalDateTime
?
如果您的客户端预计很快会迁移到使用区域时间戳的 API,那么使用字符串可能是一个可行的临时选项。看来您正在通过 gradle 生成 openApi 代码。您可以使用两个单独的 gradle 任务从两个单独的 openApi 规范生成代码,每个规范都有其相关的 typeMappings/importMappings。例如:
tasks.register<GenerateTask>("generateCodeForZonedDateTime"){
typeMappings.set(mapOf("DateTime" to "ZonedDateTime"))
importMappings.set(mapOf("ZonedDateTime" to "java.time.ZonedDateTime"))
modelPackage.set("com.example.codeforzoneddatetime")
apiPackage.set("com.example.codeforzoneddatetime"
inputSpec.set("openApiSpecWithEndpointsReturningZonedDateTime.yaml")
}
tasks.register<GenerateTask>("generateCodeForLocalDateTime"){
typeMappings.set(mapOf("DateTime" to "LocalDateTime"))
importMappings.set(mapOf("LocalDateTime" to "java.time.LocalDateTime"))
modelPackage.set("com.example.codeforlocaldatetime")
apiPackage.set("com.example.codeforlocaldatetime")
inputSpec.set("openApiSpecWithEndpointsReturningLocalDateTime.yaml")
}
返回 ZoneDateTimes 的控制器将导入
com.example.codeforzoneddatetime
com.example.codeforlocaldatetime