You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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类型字段添加注解,而非所有字段,可通过修改生成模板实现精准控制:

  1. 在项目中创建模板目录:src/main/resources/openapi-generator/templates
  2. 复制openapi-generator默认的Java模型模板model.mustache到该目录
  3. 修改模板中处理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}}
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 11:50:45