如何使用 fabric8 maven 插件为 Java zoneddatetime 添加自定义序列化程序/格式?

How to add a custom serializer/format for Java zoneddatetime with fabric8 maven plugin?

提问人:xerocool 提问时间:8/8/2023 最后编辑:Anonymousxerocool 更新时间:8/16/2023 访问量:89

问:

我正在使用 fabric8 maven 插件从它的 yaml 文件自动生成 CRD 的 Java 类。其中一个字段是:

updated_time:
  format: date-time
  type: string

它正在转换为一个字段:java.time.zoneddatetime

@com.fasterxml.jackson.annotation.JsonFormat(timezone = "UTC", pattern = "yyyy-MM-dd'T'HH:mm:ssX")
private java.time.ZonedDateTime updated_time;

我想将上面的模式更改为 ,一个带有偏移量的时间戳,这样它就可以解析时间戳,例如。 我怎样才能做到这一点?在 java-generator-maven-plugin v6.2.0 上,打开以进行升级。yyyy-MM-dd'T'HH:mm:ssXXX2023-08-07T06:43:19+00:00

java java-time zoneddatetime fabric8-maven-plugin

评论

1赞 deHaar 8/8/2023
区域不仅仅是一个偏移量,因此您可能需要切换到 。java.time.OffsetDateTime
0赞 xerocool 8/8/2023
我该怎么做?Java 代码是自动生成的。
0赞 deHaar 8/8/2023
这是个好问题,我不知道......希望它在 fabric8 的文档中。
1赞 Marc Nuri 8/9/2023
目前不支持此功能,字段格式是硬编码的。github.com/fabric8io/kubernetes-client/blob/......

答:

1赞 andreaTP 8/9/2023 #1

目前在 fabric8 java 生成器中无法做到这一点。 根据 OpenAPI 规范,日期时间字段应为 RFC 3339。

您介意详细说明发出错误日期格式的用例/项目吗?

无论如何,可行的解决方法是在生成之前在 CRD 中注释掉,以便您可以收到 .format: date-timeString

版本说明: 我确实相信您正在使用 java-generator 版本 > 6.8,因为对日期时间的本机支持最近才发布

评论

0赞 xerocool 8/9/2023
我在问题中提到的日期(2023-08-07T06:43:19+00:00)似乎符合 RFC 3339 标准:utcc.utoronto.ca/~cks/space/blog/unix/...。发出日期格式的项目是另一种语言,我不在我手中。将字段类型更改为字符串并不理想,因为我想坚持使用原始的 CRD yaml。
0赞 andreaTP 8/10/2023
可悲的是,建议的日期不符合规范,它应该是这样的:(参考)。恐怕这是生产它的项目中的一个错误......如果它是开源的,我们可以提出问题,如果没有,请以某种方式报告。您可以使用类似的东西自动执行解决方法,但我不确定如何进一步提供帮助......2023-08-07T06:42:19Zkustomize
0赞 andreaTP 8/11/2023
我退后一步:-)我正在再次阅读规范,并且规范确实允许使用时间偏移。让我们跟进这个上游问题: github.com/fabric8io/kubernetes-client/issues/5382 我们将很快发布修复程序,感谢您的报告。
0赞 xerocool 8/11/2023
谢谢。现在,我只注释掉格式。
0赞 andreaTP 8/11/2023
我在这里提供了相关的修复程序,请随时查看更改。
1赞 andreaTP 8/16/2023 #2

fabric8 java-generator 的 6.8.1 版已经发布,其中包括针对此问题的相关修复。