当前位置: 首页 > 知识库问答 >
问题:

使用具有多种日期时间格式的Swagger API

徐鸿文
2023-03-14

我正在使用一个不在我控制范围内的API,它使用一个使用Swagger codegen CLI Jar Version2.3.1的Swagger契约,并使用java8date library选项,语言也是Java。

在API中有几个datetime字段,它们都定义为:

"type": "string",
"format": "date-time"

大多数值都包括时区,但有一个值特别不包括时区。因此,我们在以相同方式定义的字段中获得这两种格式:

"1963-08-15T23:59:59+02:00"
"1963-08-15T23:59:59"

这会导致反序列化程序出现问题,因为它永远不知道要处理什么格式。

ApiClient apiClient = new ApiClient();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss[xxx]");
apiClient.setOffsetDateTimeFormat(dtf);

共有1个答案

方承弼
2023-03-14

我通过编辑生成的json.java文件和更改offsetDateTimeTypeAdapter类来解决这个问题,以便在转换中使用ZonedDateTime,在Read方法中使用ZonedDateTime:

return ZonedDateTime.parse(date, formatter).toOffsetDateTime();

然后,我将json.java文件添加到.swagger-codegen-ignore文件中。我怀疑那个文件会经常改变。

 类似资料:
  • 我有一个带有varchar2列(my_column)的表(我的表),该列以几乎所有已知的日期格式灌输可能是日期的数据。比如dd/mm/yyyyy mm/dd/yyyy ddMONyyyy ddmmyyyyy yymmddmm.dd.yydd/mm/yyyy hh: 24: ss mm-dd-yyyy等等。它还可能包含一个免费的文本数据,可能是数字或文本。我需要最快的方法将其检索为日期,如果它不能匹

  • 我正在尝试用varchar列中的更新日期列 这里,是varchar数据类型,是日期数据类型。有多种类型的日期格式,例如,09302012, 9/30/2012, 2012-09-30和更多不同的类型 如何编写单个查询以在单个查询中使用各种类型的日期格式更新列。 已编辑::: 抱歉搞砸了...我刚刚意识到这些是ssis包中的单独(部分)更新... 我们有不同类型(6)的品牌,每个品牌都会发送不同日期

  • 问题内容: 我正在使用新的日期时间API,但是在运行时: 它抛出: 查看LocalDate类的源代码时,我看到: 如文档中所述: 此方法将根据类文档中描述的简单字母和符号模式创建格式化程序。 并且所有这些字母都已定义。 那么为什么不允许我们使用一些图案字母呢? 问题答案: 仅代表一个日期,而不代表DateTime。因此,在格式化a时,“ HH:mm:ss”毫无意义。假设您要代表日期和时间,请改用a

  • 我正在玩新的日期时间API,但在运行时: 它抛出: 在查看LocalDate类的源代码时,我看到: 正如文件中所述: 该方法将根据类文档中描述的字母和符号的简单模式创建格式化程序。 所有这些字母都有定义。 那么为什么选择DateTimeFormatter呢。ofPattern不允许我们使用一些模式字母?

  • 下表显示可用于为图表中的日期时间字段创建用户定义的数据格式的说明符。 说明符 描述 D 将日显示为不带前导零的数字(1-31)。 DD 将日显示为带前导零的数字(01-31)。 M 将月份显示为不带前导零的数字(1-12)。 MM 将月份显示为带前导零的数字(01-12)。 MMM 将月份显示为缩写形式(Jan-Dec)。 MMMM 将月份显示为完整月份名(January-December)。 Y

  • 下表显示可用于为图表中的日期时间字段创建用户定义的数据格式的说明符。 说明符 描述 D 将日显示为不带前导零的数字(1-31)。 DD 将日显示为带前导零的数字(01-31)。 M 将月份显示为不带前导零的数字(1-12)。 MM 将月份显示为带前导零的数字(01-12)。 MMM 将月份显示为缩写形式(Jan-Dec)。 MMMM 将月份显示为完整月份名(January-December)。 Y