我在 spring 项目中使用 OpenAPI java 生成器 [1] 和 library:resttemplate, dateLibrary:java8 从规范生成客户端。
对于规范中的属性:
targetDate:
type: string
format: date
生成以下代码:
public static final String JSON_PROPERTY_TARGET_DATE = "targetDate";
private LocalDate targetDate;
@javax.annotation.Nonnull
@JsonProperty(JSON_PROPERTY_TARGET_DATE)
@JsonInclude(value = JsonInclude.Include.ALWAYS)
public LocalDate getTargetDate() {
return targetDate;
}
@JsonProperty(JSON_PROPERTY_TARGET_DATE)
@JsonInclude(value = JsonInclude.Include.ALWAYS)
public void setTargetDate(LocalDate targetDate) {
this.targetDate = targetDate;
}
我希望该字段能够序列化为完整日期,例如规范所承诺的“2023-01-01”:https://spec.openapis.org/oas/v3.0.0#data-types。然而它实际上被序列化为一个数组:[2023,1,1]
.
同样的另一个属性
otherDate:
type: string
format: date-time
被序列化为自纪元以来的秒数,而不是全时。 (我认为这是生成器中的错误)
由于生成了代码,我无法添加任何注释。我怎样才能确保日期正确序列化?
[1] openapi-generator-maven-plugin 6.3.0
您的问题与发电机无关,而是与杰克逊有关。
关于您的 DateTime 格式错误,这是 Jackson 序列化的默认方式LocalDate
对象当它使用JavaTimeModule
。这是在讨论这个帖子,当用户特别要求数组序列化时。这可以通过设置你想要的格式来解决,即在这里回答.
基本要点是这样的。您需要设置@JsonFormat
您的字段上方的注释。你说你不能添加任何注释,但这也是不正确的。您可以轻松添加@JsonFormat
通过设置注释到您的代码x-field-extra-annotation扩大在你的架构中。例如:
targetDate:
type: string
format: date
x-field-extra-annotation: '@com.fasterxml.jackson.annotation.JsonFormat(shape = com.fasterxml.jackson.annotation.JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")'
这将导致生成以下代码
@com.fasterxml.jackson.annotation.JsonFormat(shape = com.fasterxml.jackson.annotation.JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private LocalDate targetDate;
至于date-time
自纪元以来以秒为单位连载,这是杰克逊的一个非常简单的场景。您可以禁用SerializationFeature.WRITE_DATES_AS_TIMESTAMPS
。这将生成 ISO-8601 标准字符串。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)