springboot2.x Jackson自定义序列化,优雅实现

2019-10-23  本文已影响0人  阿广本尊

前言

近期正好有个项目,客户端同学要求所有json字段都必须得给,还必须得初始化。如空String返回""、空Array、Collection返回[]、空Boolean返回false、Object空对象返回{},等等。

空对象这块确实不好处理,反序列化遇到类型擦除问题,网上找了一大圈基本都没有一个可靠的解决方案。但是,又不想在代码硬编码判断对象为空时把这个对象初始化,这样不太优雅。因此,想基于自定义JacksonHttpMessageConverter带注解的方式来巧妙的实现。废话不多说,我们上代码!!

实现方式

先定义一个枚举类型,表示需要处理的方式

然后定义一个注解,以便当对象为null时,返回自动加上花括号"{}"。

然后自定义JacksonHttpMessageConverter集成MappingJackson2HttpMessageConverter来实现个性化序列化。花括号"{}"的核心实现代码如下:

最后,在需要加花括号"{}"的字段上加上@JacksonFill(FillTypeEnum.BRACE)主键。

日期格式化及时区设置

最终,我们实现效果如下:

结束语

笔者也尝试过使用fastjson替代jackson的方案,fastjson支持WriteMapNullValue、WriteNullListAsEmpty、WriteNullStringAsEmpty、WriteNullNumberAsZero等。但同样Object的也需要自己个性化处理,在实体类字段直接初始化也是一种解决办法,但fastjson在兼容性上跟jackson比会有些问题,如二进制序列号。所以,尝试了一种新的解决思路。

具体代码见:https://github.com/daoshenzzg/springboot2.x-example

本系列文章

springboot2.x Jackson自定义序列化,优雅实现String、List、Object返回""、[]、{}

springboot2.x 集成 Mybatis plus(多数据源),提升20%的开发效率

springboot2.x 全局异常处理正确方式

springboot2.x 如何优雅的实现API输出?

如何优雅的实现数据置顶、置尾、交换、拖动排序?

上一篇下一篇

猜你喜欢

热点阅读