如何解决转换swagger格式:日期时间到LocalDateTime.class
我有一个无法更改的 swagger.json 规范。我正在使用 swagger-codegen 从我的 swagger.json 创建一个库,如下所示:
$ java -jar swagger-codegen-cli.jar generate -i swagger.json -l java -o .
问题是在我的 swagger.json 中,一些格式被声明为 date-time
并且 codegen 将它们转换为 OffsetDateTime
类类型......但是我的服务请求的响应出现在表单中LocalDateTime,像这样
{....,"expirationDeadline": "2022-04-22T10:36:13.383",....}
因此,当我使用该库并尝试将包含2022-04-22T10:36:13.383
的 JSONObject 反序列化到我的类时,它失败了,因为它无法将 2022-04-22T10:36:13.383
转换为 OffsetDateTime
.
最终在一些搜索之后,我关注了一些其他线程,例如 this one,并且我设法使用导入和类型映射将 OffsetDateTime
类型更改为 LocalDateTime
,如下所示:
$ java -jar swagger-codegen-cli.jar generate \
-i updated-swagger.json \
-l java \
-o ./java-client-swagger-codegen/ \
--import-mappings org.threeten.bp.OffsetDateTime=org.threeten.bp.LocalDate \
--type-mappings OffsetDateTime=LocalDate
但现在的问题是 swagger-codegen
只用 OffsetDateTimeTypeAdaper
、DateTypeAdapter
、LocalDateTypeAdapter
和 SqlDateTypeAdapter
创建 JSON 类,如下所示:
所以现在每当我尝试反序列化包含我的 LocalDateTime 格式的日期的对象时,我最终都会收到此错误:
serialize json java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 at $.expirationDeadline
到目前为止我尝试过的:
- 我让 codegen 将我的
date-time
格式转换为OffsetDateTime
,然后手动将"expirationDeadline": "2022-04-22T10:36:13.383"
更改为"expirationDeadline": "2022-04-22T10:36:13.383+01:00"
并且它工作正常。 - 我让 codegen 将我的
date-time
格式转换为LocalDate
,然后手动将"expirationDeadline": "2022-04-22T10:36:13.383"
组合为"expirationDeadline": "2022-04-22"
,它工作正常。 - 生成库后,我手动创建了
LocalDateTimeTypeAdapter
只是从另一个适配器复制逻辑,现在它可以工作了,我可以将预期的格式转换为LocalDateTime
格式!
结论(实际的求助电话)
不幸的是,我无法更改此格式,因此我假设我需要一种方法让我的 swagger codegen
在运行命令时生成此 LocalDateTimeTypeAdapter
。有什么我可以给我的命令的论据吗?有人可以帮我吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。