如何在openapi-generator生成的Spring Boot模型中添加@JsonFormat
解决方案
方案一:通过Maven插件配置直接添加@JsonFormat注解
在openapi-generator-maven-plugin的配置中,利用configOptions启用Jackson支持并指定字段级注解,快速实现需求:
<plugin> <groupId>org.openapitools</groupId> <artifactId>openapi-generator-maven-plugin</artifactId> <version>7.6.0</version> <!-- 使用最新稳定版本 --> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <inputSpec>${project.basedir}/src/main/resources/openapi.yaml</inputSpec> <generatorName>spring</generatorName> <configOptions> <dateLibrary>java8</dateLibrary> <!-- 指定Java 8日期库 --> <jackson>true</jackson> <!-- 启用Jackson注解支持 --> <!-- 为所有字段添加@JsonFormat注解,适用于全局统一格式场景 --> <fieldAnnotations>@com.fasterxml.jackson.annotation.JsonFormat(shape = com.fasterxml.jackson.annotation.JsonFormat.Shape.STRING, pattern = "dd.MM.yyyy HH:mm:ss")</fieldAnnotations> </configOptions> </configuration> </execution> </executions> </plugin>
方案二:自定义Mustache模板精准控制字段注解
如果只想给LocalDateTime类型字段添加注解,而非所有字段,可通过修改生成模板实现精准控制:
- 在项目中创建模板目录:
src/main/resources/openapi-generator/templates - 复制openapi-generator默认的Java模型模板
model.mustache到该目录 - 修改模板中处理
date-time类型字段的逻辑,在@DateTimeFormat后追加@JsonFormat注解:
{{#isDateTime}} @javax.validation.constraints.NotNull @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) @com.fasterxml.jackson.annotation.JsonFormat(shape = com.fasterxml.jackson.annotation.JsonFormat.Shape.STRING, pattern = "dd.MM.yyyy HH:mm:ss") {{/isDateTime}}
- 在Maven插件配置中指定自定义模板目录:
<plugin> <groupId>org.openapitools</groupId> <artifactId>openapi-generator-maven-plugin</artifactId> <version>7.6.0</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <inputSpec>${project.basedir}/src/main/resources/openapi.yaml</inputSpec> <generatorName>spring</generatorName> <configOptions> <dateLibrary>java8</dateLibrary> <jackson>true</jackson> </configOptions> <!-- 指定自定义模板路径 --> <templateDirectory>src/main/resources/openapi-generator/templates</templateDirectory> </configuration> </execution> </executions> </plugin>
方案三:全局配置Jackson格式化(统一所有LocalDateTime字段)
若希望全局统一所有LocalDateTime类型的序列化格式,可在application.properties中添加以下配置:
# 禁用时间戳序列化,强制使用字符串格式 spring.jackson.serialization.write-dates-as-timestamps=false # 指定LocalDateTime的序列化/反序列化格式 spring.jackson.datatype.jsr310.local-date-time-format=dd.MM.yyyy HH:mm:ss # 禁用时区自动调整,避免格式偏移 spring.jackson.deserialization.adjust-dates-to-context-time-zone=false
若之前配置无效,检查是否引入jackson-datatype-jsr310依赖(Spring Boot Starter默认已包含),同时确保没有自定义ObjectMapper覆盖默认配置。
内容的提问来源于stack exchange,提问作者Eduard Grigoryev
相关产品推荐
相关产品推荐

