记一个Jackson与Hutool混用的坑 No serializer found for class cn.hutool.json.JSONNull and no properties discov

时间:2024-04-14 11:35:39

问题:

前端在获取接口的时候,有一个JsonObject put字段的值为null,前端获取不到查看源码发现

原来会默认忽略为null的值 ,

记一个Jackson与Hutool混用的坑 No serializer found for class cn.hutool.json.JSONNull and no properties discov

所以这好办啊,构造参数重新设值就好了,于是如下图

记一个Jackson与Hutool混用的坑 No serializer found for class cn.hutool.json.JSONNull and no properties discov

启动,运行,再返回前端的时候竟然报错了,看错误信息

记一个Jackson与Hutool混用的坑 No serializer found for class cn.hutool.json.JSONNull and no properties discov

问题分析

Hutool会使用JSONNull来表示空值,而SpringBoot默认使用的序列化是Jackson,在接口调用过程中使用了Map,直接传入了Hutool的JSONObject,而该Map存在空值,所以存在JSONNull,最终导致错误。

问题解决

使用DTO传递参数,总之就是不要直接把JSONObjct作为参数传递。

总结

在使用JSON序列化工具的时候,尽量不要混合使用,即使存在多个JSON工具,也不把一个JSON工具的JSON对象直接用另一个JSON工具来处理,因为每个JSON工具都有自己的对JSON的处理,包括一些优化,如果混着用就会出问题,所以,在使用JSON工具处理JSON的时候不要混着使用多种JSON

吐槽

这里吐槽下Hutool,null值处理的时候要小心,非空判断用JSONObject.isNull,不要自行处理