美文网首页
springboot2.x Jackson自定义序列化,优雅实现

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

作者: 阿广本尊 | 来源:发表于2019-10-23 20:54 被阅读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输出?

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

    相关文章

      网友评论

          本文标题:springboot2.x Jackson自定义序列化,优雅实现

          本文链接:https://www.haomeiwen.com/subject/eiuxgxtx.html