解决三更博客项目中出现的小BUG-01-使用fastjson序列化对象问题

问题引入

在测试个人信息中的头像上传功能时,页面一直显示图片上传失败:
在这里插入图片描述
这种问题大概率是后端接口返回的信息,查看控制台,报了如下错:
在这里插入图片描述

分析问题

报错信息明显:JSON异常,要知道,JSON异常一般都是序列化异常,也就是调用序列化方法的那里出了异常,查看下面的报错信息,跳到报错行,进去就知道

在这里插入图片描述
确实是序列化的问题,至于为什么不能序列化,其实也可以大致推断一下,就是这个参数对象所属的类没有实现序列化接口,以至于不能序列化了,通过debug大概看一下(在debug中evaluate特别好用,可以快速计算表达式的值,这当我们需要了解某某对象的属性,调用其方法结果是什么很方便,因为你执行代码未必就执行了那个方法,还可以执行几段代码,查看结果,总之debug中这个经常使用到),debug结果如下图:
在这里插入图片描述
在这里插入图片描述debug结果和我之前想的一样,确实是因为这个原因。
至于为什么加了@LogPrint注解就这样,是因为一旦加了这个注解,就会走序列化的逻辑。

解决问题

解决问题的过程中也是磕磕碰碰的,本来还想在序列化之前加上判断,判断是否实现了序列化接口,实现了就序列化,没实现就不序列化,后面执行发现还是不对,走了一遍for,标记值还没发生改变,说明是实现了序列化接口的,只是当前类没有直接实现而是由父类实现的,因此这里也说明一个问题,只有当要序列化的那个对象所属的直接类实现了序列化接口,这个对象才能被序列化,否则仍然无法被序列化。
最终解决这个bug也是无奈之举,只能将更新接口方法上面的@LogPrint注解去掉

总结

1.对于这种涉及到序列化时,一定得注意,不是什么都能序列化的,这里到底怎样判断对象到底能不能序列化,暂时我还没想得出,等我想明白了,再来进行补充。
2.这里拓展出如果前后端交互式视图对象中存在不能序列化的属性,一定得忽略改属性的序列化与反序列化,具体办法是在属性上面加上@JsonIgnore注解接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值