SpringMVC Json自定义序列化和反序列化

本文介绍了在SpringMVC中针对jackson和fastjson两个框架,如何进行自定义的JSON序列化和反序列化处理。针对日期转换和字符串trim需求,提供了详细的代码示例和解决方案,包括使用@JsonSerialize注解、自定义SimpleModule、SerializeFilter、@JSONField以及实现ObjectDeserializer接口等方法。
摘要由CSDN通过智能技术生成

需求背景

需求一:SpringMVC构建的微服务系统,数据库对日期的存储是Long类型的时间戳,前端之前是默认使用Long类型时间,现在前端框架改动,要求后端响应数据时,Long类型的时间自动变成标准时间格式(yyyy-MM-dd HH:mm:ss)。

涉及到这个转换的范围挺大,所有的实体表都有创建时间createTime和修改时间updateTime,目前的主要诉求也是针对这两个字段,并且在实体详情数据和列表数据都存在,需要一个统一的方法,对这两个字段进行处理。

需求二:前端请求上传的JSON报文,String类型的内容,可能会出现前后有空格的现象,如果前端框架未对此问题进行处理,后端收到的JSON请求反序列化为对象时,就会出现String类型的值,前后有空格,现需要一个统一的处理方法,对接收的String类型属性执行trim方法。

解决方案

SpringMVC默认的JSON框架为jackson,也可以使用fastjson。

jackson框架
自定义序列化

如果项目使用jackson框架做json序列化,推荐的方案是使用@JsonSerialize注解,示例代码如下:

@JsonSerialize(using = CustomDateSerializer.class)  
private Long createTime;

@JsonSerialize(using = CustomDateSerializer.class)  
private Long updateTime;

CustomDateSerializer类的实现示例如下:

public class CustomDateSerializer extends JsonSerializer<Long> {
   

	@Override
	public void serialize(Long aLong, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
   
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date = new Date(aLong);
		jsonGenerator.writeString(sdf.format(date));
	}
}

这种方案的好处如下:

  1. 自定义的实现类可以复用
  2. 精准到需要转换处理的字段,不受限于createTime和updateTime,更贴近于需求

缺点就是需要转换的字段都需要使用注解,工作量有点大

当然有其他的统一处理方案,这里不赘述。

自定义反序列化

在jackson框架上实现自定义序列化,也是非常方便的,继承SimpleModule类即可:

@Component
public class StringTrimModule extends SimpleModule {
   

    public StringTrimModule() {
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值