我有一个无法更改的 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
.
最终,经过一番搜索,我关注了其他一些类似的线程,并且我设法将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
JSON 类,如下所示:OffsetDateTimeTypeAdaper
DateTypeAdapter
LocalDateTypeAdapter
SqlDateTypeAdapter
因此,现在每当我尝试以 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
我有什么论据可以让我的命令发生这种情况吗?谁能帮我?