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

前言

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

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

实现方式

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

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

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

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

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

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

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

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

日期格式化及时区设置

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

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

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

结束语

笔者也尝试过使用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输出?

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

你可能感兴趣的:(springboot2.x Jackson自定义序列化,优雅实现String、List、Object返回""、[]、{})