Jackson 自定义序列化和反序列化
目录
- 1. 创建序列化类
- 2. 创建反序列化类
- 3. 实体类字段添加注解
- 4. 反序列操作
- 5. 序列化操作
1. 创建序列化类
- 继承JsonSerializer或者StdSerializer,添加泛型
- 自定义字符串序列化类,md5脱敏
package com.example.fisher.gradledemo.sysuser.entity;import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.springframework.util.DigestUtils;import java.io.IOException;public class StringJsonSerializer extends JsonSerializer<String> {@Overridepublic void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {if (value != null) {String s = DigestUtils.md5DigestAsHex(value.getBytes("UTF-8"));gen.writeString(s);}}
}
- 自定义日期序列化类,转时间戳
package com.example.fisher.gradledemo.sysuser.entity;import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneOffset;public class LocalDateTime2Long extends StdSerializer<LocalDateTime> {public LocalDateTime2Long() {super(LocalDateTime.class);}@Overridepublic void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider provider) throws IOException {Long epochSecond = value.toEpochSecond(ZoneOffset.ofHours(8));gen.writeObject(epochSecond);}
}
2. 创建反序列化类
- 继承JsonDeserializer
package com.example.fisher.gradledemo.sysuser.entity;import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;import java.io.IOException;public class AgeDeserializer extends JsonDeserializer<Integer> {@Overridepublic Integer deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {int intValue = p.getIntValue();return intValue * 10;}
}
3. 实体类字段添加注解
- 序列化@JsonSerialize,反序列化@JsonDeserialize
package com.example.fisher.gradledemo.sysuser.entity;import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Data;import java.io.Serializable;
import java.time.LocalDateTime;@SuppressWarnings("serial")
@Data
public class SysUser extends Model<SysUser> {@TableId(type = IdType.AUTO)private Long userId;@JsonSerialize(using = LocalDateTime2Long.class)@TableField(fill = FieldFill.INSERT)private LocalDateTime createTime;@TableField(fill = FieldFill.UPDATE)private LocalDateTime updateTime;@TableLogic@JsonIgnoreprivate Integer delFlag;@JsonSerialize(using = StringJsonSerializer.class)private String name;@JsonDeserialize(using = AgeDeserializer.class)private Integer age;private String interest;/*** 获取主键值** @return 主键值*/@Overridepublic Serializable pkVal() {return this.userId;}
}
4. 反序列操作
- 年龄10反序列化为100
5. 序列化操作
- 名字被md5处理,创建时间转时间戳
Jackson 自定义序列化和反序列化相关推荐
- jackson多态序列化与反序列化
前几天遇到个问题,场景大概是 list 中既有父类又有子类,在反序列化时丢掉了子类的信息.解决这个问题也没花多少时间,不过还是打算记录下.参考链接如下: Jackson JSON - Using @J ...
- 自定义序列化和反序列化的java实现
2019独角兽企业重金招聘Python工程师标准>>> package j2se.IO;import java.io.*;/*** Created by jingqing.zhou ...
- C#自定义序列化反序列化与 ISerializable 接口
ISerializable 接口 MSDN注解:允许对象控制其自己的序列化和反序列化过程. ISerializable 接口的定义: public interface ISerializable {v ...
- hutol json null值没了_JSON数据处理框架Jackson精解第一篇-序列化与反序列化核心用法...
Jackson是Spring Boot默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的,没有这种限制.它提供了很 ...
- 序列化 自定义名字_反序列化漏洞(Web漏洞及防御)
为了有效地存储或传递数据,同时不丢失其类型和结构,经常需要利用序列化和反序列化函数对数据进行处理! 序列化 将对象或数据转换为可以恢复的数据格式的过程 什么时候需要序列化? 1)对象在网络上传输时 2 ...
- Java基础-序列化与反序列化
序列化和反序列化在面试中也经常考查,下面就总结一下 Java 中的序列化和反序列化. 什么是序列化和反序列化? 序列化是将 Java 对象转换成与平台无关的二进制流,而反序列化则是将二进制流恢复成原来 ...
- java-Transient关键字、Volatile关键字介绍和序列化、反序列化机制、单例类序列化
- Transient关键字 Java的serialization提供了一种持久化对象实例的机制.当持久化对象时,可能有一个特殊的对象数据成员,我们不想 用serialization机制来保存它.为 ...
- 深入Atlas系列:探究序列化与反序列化能力(下) - JavaScriptSerializer
在ASP.NET AJAX中,客户端的序列化与反序列能力由Sys.Serialization.JavaScriptSerializer类的serialize和deserialize两个静态方法提供.在 ...
- java序列化与反序列化总结
很多商业项目用到数据库.内存映射文件和普通文件来完成项目中的序列化处理的需求,但是这些方法很少会依靠于Java序列化.本文也不是用来解释序列化的,而是一起来看看面试中有关序列化的问题,这些问题你很有可 ...
最新文章
- 批量将中文单个字音频转为图像(二维矩阵)
- Day10-Python3基础-协程、异步IO、redis缓存、rabbitMQ队列
- 神策数据荣获“金猿奖 - 2017 金融科技优秀产品奖”
- ClassLoader.getResourceAsStream(name);获取配置文件的方法
- 查看linux电脑内存free命令,Linux free命令查看内存状态
- 超级卡特兰数(bzoj 4706: B君的多边形)
- 【前端】设置好CSS样式动态添加元素会按照样式显示
- 二叉树的存储结构入门(java描述)
- 【转】给网站添加X-UA-Compatible标签
- dir_recurse是 php函数,php关于url、文件、目录、ip的相关问题汇总
- 基于VS2015的C#的GDAl环境配置
- 看完这篇文章你就清楚的知道 ZooKeeper的 概念了
- 游戏辅助原理与制作02-植物大战僵尸03-冷却时间基址
- 遥感图像处理:最小噪声分离变换(Minimum Noise Fraction Rotation,MNF Rotation)
- ASP.NET内置的6种验证控件的使用
- 五招教你做好企业年终绩效考核,太实用了!
- CMTime,CMTimeMake CMTimeMakeWithSeconds
- 基于Django的论坛系统项目
- 推荐一款免费的文件夹加密软件 Free Encrypt Folder 加密耗子
- python中calendar模块_python calendar模块