当前位置: 首页 > news >正文

@JsonFormat格式化日期

1. 核心作用

  • 日期格式化:将 Date/LocalDateTime 等类型字段按指定格式转换为字符串
  • 时区控制:解决时区不一致导致的日期偏差问题
  • 数值格式化:控制数字的显示格式(如小数位数)

2. 常用场景

场景 1:日期格式化
import com.fasterxml.jackson.annotation.JsonFormat;
public class Order {@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")private Date createTime;@JsonFormat(pattern = "yyyy/MM/dd")private LocalDate deliveryDate;
}
  • 序列化结果
    {"createTime": "2023-10-05 14:30:00","deliveryDate": "2023/10/06"
    }
    
场景 2:时区控制
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
private Date eventDate;
  • 避免服务端与客户端时区不一致导致的时间偏差
场景 3:数值格式化
@JsonFormat(shape = JsonFormat.Shape.STRING) // 将数值序列化为字符串
private Long productId;@JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern = "#,##0.00")
private BigDecimal price;

3. 关键参数详解

参数名说明
pattern格式模板(如 yyyy-MM-dd
timezone时区设置(如 GMT+8Asia/Shanghai
shape指定序列化形态:STRING/NUMBER/OBJECT
locale地区设置(如 Locale.CHINA
with指定自定义格式化器(需实现 JsonFormat.Value

4. 常见问题解决

问题 1:日期显示为时间戳
// 解决方案:明确指定格式
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
问题 2:LocalDateTime 报错
// 需要添加依赖:
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'// 在类上添加注解:
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime timestamp;
问题 3:时区不一致
// 强制指定时区
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Tokyo")
private Date japanEventDate;

5. 高级用法

自定义形状 (Shape)
@JsonFormat(shape = JsonFormat.Shape.ARRAY) // 将对象序列化为数组
private Coordinate point;// 序列化结果:
// [120.5, 30.2] 而不是 {"x":120.5,"y":30.2}
枚举序列化控制
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum Status {NEW(1, "新建"),PROCESSING(2, "处理中");// 枚举字段...
}

6. 最佳实践

  1. 全局配置:在 application.yml 中设置默认格式(Spring Boot)
    spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8
    
  2. 字段级覆盖:用 @JsonFormat 覆盖全局配置
  3. 测试验证:使用 ObjectMapper 手动测试序列化结果

7. 完整示例

import com.fasterxml.jackson.annotation.JsonFormat;
public class Event {@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai",shape = JsonFormat.Shape.STRING)private Date eventTime;@JsonFormat(shape = JsonFormat.Shape.NUMBER)private Long eventId;// Getters & Setters
}

通过合理使用 @JsonFormat,可以精准控制 Java 对象与 JSON 之间的数据格式转换,解决前后端数据交互中的格式痛点。

http://www.dtcms.com/a/362497.html

相关文章:

  • FastAPI 介绍及示例开发
  • 飞牛OS Nas,SSH安装宝塔后,smb文件不能共享问题
  • Elasticsearch赋能3D打印机任务统计分析
  • ASO优化从命名开始增长:打造Apple Store和Google Play完美应用名称
  • 【代码里的英雄传】Dubbo 的一生:一位分布式勇士的传奇旅程
  • 一键提取,是真强呀!~
  • 碳星球解决方案技术落地:多源数据整合 + AI 建模,赋能政府调控、企业管理与园区零碳治理
  • 《水浒智慧》第二部 “英雄是怎么炼成的” (上篇)读书笔记
  • GPT-5在医疗领域应用的研究效能初探(上)
  • Apache 的安装及基本使用
  • 文字识别接口-文字识别技术-ocr api
  • GEM5学习(3):如何快速创建一个组件
  • 【Maven】《十分钟搞清Maevn项目》
  • AI Agent 扣子介绍
  • 优选算法的映射之妙:哈希表专题
  • 固定资产管理系统核心功能拆解:批量导入、OCR 识别有多高效?
  • Linux内核O(1)调度算法
  • 云计算学习笔记——Linux系统网络配置与远程管理(ssh)篇
  • 二进制流进行预览pdf、excel、docx
  • 手把手教你学 Simulink (1.3):探索Simulink模块库的奇妙世界
  • QT6(QFileSystemModel和QTreeView)
  • 第三方软件测评:第三方组件(如 jQuery、Bootstrap)的 WEB安全测试方法
  • Element Plus 表格表单校验功能详解
  • 封装Element UI中el-table表格为可配置列公用组件
  • ubantu20.04 git clone 无法连接问题与解决方法
  • Hard Disk Sentinel:全面监控硬盘和SSD的健康与性能
  • SQLSERVER基本cmd操作命令
  • 2025含金量高的市场岗位证书有哪些?
  • 4种有效方法将联想手机数据传输到电脑
  • 设计软件启动失败?“找不到vcruntime140.dll,无法继续执行代码” 场景化解决方案来了