java中的JsonSerializer用法,前后端单位转换必备
作者:xiaozhengtongxue 时间:2022-05-01 07:58:48
java中的JsonSerializer用法
背景
今天在写项目的时候遇到一个问题,项目中有个类中有创建时间和更新时间两个属性,但是单位在后端用的是Date,而前端给的API中用的是秒。这就涉及到单位的转换问题。但是如何优雅地对单位进行转化呢?
演示
解决方法
利用@JsonSerialize注解,可以方便地实现将date数据转换成long型数据等功能,该注解作用在属性的getter()方法上。
1. 写一个负责转换的类,继承自JsonSerializer类,里面写好规则
public class Date2LongSerializer extends JsonSerializer<Date> {
@Override
public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {//把Date转成Long
jsonGenerator.writeNumber(date.getTime() / 1000);
}
}
2. 在返回的参数里加上注解@JsonSerialize(using = XXX.class) XXX为上一步新建的转换类
//创建时间
@JsonSerialize(using = Date2LongSerializer.class)//时间戳将Date转成Long
private Date categoryTime;
//修改时间
@JsonSerialize(using = Date2LongSerializer.class)
private Date updateTime;
这样就完成了时间戳的转换。
JackJson中自定义JsonSerializer使用
最近在做一个需求,一个时间字段,数据库类型为timestamp,默认值为'1970-01-01 08:00:01',产品要求这种情况展示为“-1”,实体类中的属性类型为Date,我也不能把Date属性值设置为“-1”,又不想新加一个String类型的属性,那怎么办呢?
遇到这种问题,可以使用JackJson的@JsonSerialize,具体实现如下:
1、自定义类继承JsonSerializer
public class DefaultTimeSerializer extends JsonSerializer<Date> {
/**
* Method that can be called to ask implementation to serialize
* values of type this serializer handles.
*
* @param value Value to serialize; can <b>not</b> be null.
* @param gen Generator used to output resulting Json content
* @param serializers Provider that can be used to get serializers for
*/
@Override
public void serialize(Date value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
if (THOUSAND_MILLISECOND.equals(value.getTime())) {
gen.writeString("-1");
} else {
gen.writeString(DateUtils.dateFormat(value, DateUtils.MONTH_PATTERN));
}
}
}
2、在实体类的字段上
使用@JsonSerialize注解,并且指定要使用的Serializer
/**
* 日期(精确到月)
*/
@JsonSerialize(using = DefaultTimeSerializer.class)
private Date Time;
3、使用效果
其实使用SpringBoot的@RestController注解,我们最终返回的结果集都会被转换为Json信息,那么就没有类型而言,因为都是String格式的了。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
来源:https://www.cnblogs.com/xiaozhengtongxue/p/13442727.html
标签:java,JsonSerializer,单位转换
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java8新特性之泛型的目标类型推断_动力节点Java学院整理
2023-11-26 10:38:21
SWT(JFace)体验之复制粘贴
2022-11-18 13:47:46
MyBatis3源码解析之如何获取数据源详解
2023-12-06 02:23:08
![](https://img.aspxhome.com/file/2023/3/60903_0s.jpg)
Android Camera+SurfaceView自动聚焦防止变形拉伸
2023-06-18 06:35:54
![](https://img.aspxhome.com/file/2023/6/82396_0s.png)
RocketMQ源码解析broker 启动流程
2022-12-25 10:50:54
Hibernate批量处理海量数据的方法
2023-07-30 08:12:04
java文件操作输入输出结构详解
2023-07-30 21:48:30
SpringBoot集成内存数据库H2的实践
2023-03-20 22:44:34
![](https://img.aspxhome.com/file/2023/5/63405_0s.png)
java isInterrupted()判断线程的实例讲解
2023-07-21 01:45:53
如何修改FeginCilent定义的服务名到指定服务
2022-07-05 05:49:05
如何用120行Java代码写一个自己的区块链
2023-07-17 03:44:33
Java+opencv3.2.0实现人脸检测功能
2022-11-27 10:36:42
![](https://img.aspxhome.com/file/2023/6/64556_0s.jpg)
解决RedisTemplate调用increment报错问题
2023-11-20 06:35:05
微信小程序获取手机号,后端JAVA解密流程代码
2023-11-29 07:57:26
关于SpringCloudStream配置问题
2023-08-08 20:12:00
![](https://img.aspxhome.com/file/2023/0/58050_0s.jpg)
教你怎么用SpringBoot+Mybati-Plus快速搭建代码
2023-08-07 12:42:10
![](https://img.aspxhome.com/file/2023/1/58081_0s.png)
C++实现LeetCode(205.同构字符串)
2023-06-21 04:06:54
解决spring mvc 多数据源切换,不支持事务控制的问题
2022-09-30 03:39:56
详解java接口基础知识附思维导图
2023-11-09 10:07:28
![](https://img.aspxhome.com/file/2023/1/58861_0s.png)
解析spring加载bean流程的方法
2023-11-29 13:50:32
![](https://img.aspxhome.com/file/2023/2/60062_0s.png)