让springboot序列化空值null为"null"而不是空报文体(jackson)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了让springboot序列化空值null为"null"而不是空报文体(jackson)相关的知识,希望对你有一定的参考价值。

参考技术A springboot以 @RestController 或 @ResponseBody 注解自动处理的接口会将方法返回的对象序列化为json字符串返回给前端,但是默认情况下,如果返回的对象为null,并不会进行json序列化,而是返回空报文体
如果前端使用类似fetch的json()方法这种严格校验json格式的方式获取数据,遇到空报文体就会报错
解决办法:

这里之所以需要用一个占位的对象来代替null本身,是因为 AbstractMessageConverterMethodProcessor 中对所有advice(包括默认的)预处理完的body进行了判断,如果为null,跳过序列化,直接返回空报文体给客户端,改为使用占位对象后,则可以进入jackson的序列化逻辑中,通过注解判断使用 NullSerializer 向客户端回写合法的json字符串 "null" (不包括引号)

以上是关于让springboot序列化空值null为"null"而不是空报文体(jackson)的主要内容,如果未能解决你的问题,请参考以下文章

Jackson 序列化:忽略空值(或 null)

Gson教程九(译):强制序列化null值

Rails 3.2:用json序列化中的空字符串替换空值

Xml 序列化 - 隐藏空值

使用 Parcelable 接口时如何序列化空值

SSIS 空值问题