OpenApi gradle序列化/反序列化多种日期时间格式

1qczuiv0  于 2023-05-18  发布在  其他
关注(0)|答案(1)|浏览(226)

我想知道是否有一种方法可以使OpenApi生成的类显示其正确的日期和时间格式。我读了一些关于这方面的主题,没有一个有帮助。以下是build.gradle的示例:

configOptions.set([
                dateLibrary : "java8",
        ])
        library.set("jersey2")
        typeMappings.set([
                ZonedDateTime: ZonedDateTime,
                LocalDateTime: LocalDateTime,
        ])
        importMappings.set([
                ZonedDateTime: "java.time.ZonedDateTime",
                LocalDateTime: "java.time.LocalDateTime",
        ])

问题是,这将在OffsetDateTime中生成所有日期时间格式。我在typeMappings中这样做了:偏移日期时间:java.time.ZonedDateTime。这迫使所有内容都在ZonedDateTime中生成。有没有一种方法可以有多个日期和时间格式?我想有ZonedDateTime,LocalDateTime等等。还尝试设置dateLibrary:“自定义”和创建Map我自己,没有工作以及。

xxls0lw8

xxls0lw81#

这可以通过定义自己的格式来完成。假设我们有以下模式

components:
  schemas:
    myDate:
      type: object
      properties:
        ZonedDateTime:
          type: string
          format: date-time
        LocalDateTime:
          type: string
          format: date-time
        OffsetDateTime:
          type: string
          format: date-time
        Instant:
          type: string
          format: date-time

生成器将生成这些中的每一个作为OffsetDateTime。当你改变你的typeMappings时,你就走上了正确的道路。但是,正如你所注意到的,这是一个全球性的变化。
根据swagger文档:
format是一个开放值,因此您可以使用任何格式,即使不是OpenAPI规范定义的格式
因此,解决这个问题的最佳方法是将上述模式更改为使用如下自定义格式值:

myDate:
  type: object
  properties:
    ZonedDateTime:
      type: string
      format: zoned
    LocalDateTime:
      type: string
      format: local
    OffsetDateTime:
      type: string
      format: date-time # Nothing needed here.  This is already handled by the generator
    Instant:
      type: string
      format: instant

现在,您可以按如下方式更改typeMappingsimportMappings

typeMappings = [
            string+instant: "Instant",
            string+zoned: "ZonedDateTime",
            string+local: "LocalDateTime"
    ]
    importMappings = [
            LocalDateTime: "java.time.OffsetDateTime",
            ZonedDateTime: "java.time.ZonedDateTime",
            Instant: "java.time.Instant"
    ]

这应该能满足你的需要

相关问题