随手笔记-Jackson -> @JsonFormat -> 失真问题解决

引言

关于使用雪花算法作为主键id生成, 19位数return给前端出现数据失真, 导致id与数据库中不对应, 极有可能出现缓存穿透问题

更多可参考github项目官网解决问题, 也可直接传送到Jackson文档
在这里插入图片描述

解决方法

问题

浏览器开发者模式看到的接口返回数据, 此ID为失真状态的value
在这里插入图片描述
postman中测试的接口真实ID为正确的value
在这里插入图片描述
数据库中对比下来
在这里插入图片描述

解决

使用了@JsonFormat注解解决失真问题

/**
 * DTO实体
 */
@JsonFormat(shape = JsonFormat.Shape.STRING)
private Long id;

官方文档这样对此做出解释
在这里插入图片描述
JsonFormat: 具有每种类型行为的一般注释;例如,可用于指定序列化日期/时间值时使用的格式

JsonFormat

JsonFormat主要还用于DTO格式化时间

@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”, locale = “zh”, timezone = “GMT+8)

参数说明

  • pattern 指定转化的格式SSSZ(S指的是微秒,Z指时区),此处的pattern和java.text.SimpleDateFormat中的Time Patterns一致

  • locale主要指语言,如果中文的话,月份输出是五月,但是英文就是May,尤其是在反序列化的时候特别重要

  • timezone主要解决“8小时”问题

copy文档示例

Letter Date or Time Component Presentation Examples

G Era designator Text AD
y Year Year 1996; 96
Y Week year Year 2009; 09
M Month in year Month July; Jul; 07
w Week in year Number 27
W Week in month Number 2
D Day in year Number 189
d Day in month Number 10
F Day of week in month Number 2
E Day name in week Text Tuesday; Tue
u Day number of week (1 = Monday, …, 7 = Sunday) Number 1
a Am/pm marker Text PM
H Hour in day (0-23) Number 0
k Hour in day (1-24) Number 24
K Hour in am/pm (0-11) Number 0
h Hour in am/pm (1-12) Number 12
m Minute in hour Number 30
s Second in minute Number 55
S Millisecond Number 978
z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
Z Time zone RFC 822 time zone -0800
X Time zone ISO 8601 time zone -08; -0800; -08:00

想看源码解析的点赞收藏, 这周末可以肝

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值