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

前言

近期正好有个项目,客户端同学要求所有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输出?

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容