近日在测试代码的时候出现了这样一个错误
翻译是嵌套异常为com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造“com.sky.dto.OrdersCancelDTO”的实例(不存在类似默认构造函数的创建者):无法从Object值反序列化(不存在基于委托或属性的创建者)
下方为分享经历,如赶时间可点击目录或者滑到底部直达问题解决方案
秉着有bug就找bug的原则,便开启了漫长的找bug之旅,因为代码没有进入我的方法,所以先把我写的方法体错误优先排除掉,出错的大概率是我定义方法前的逻辑出了问题,于是继续往前找,也是没有发现有什么错误,经过了多轮反复确认后,自己的代码逻辑确实没有找到相应的问题,接下来就该寻找相关的文献资料去查询这可能会是因为什么问题引起的,后面找到可能是缺少一个构造器
但我看到自己的代码并没有自定义构造器,所以用的是JVM的默认空参构造器,难道他需要一个有参构造器?于是给他加上了有参和空参构造器,惊奇的发现,bug成功解决了,但我还是不知道是不是因为缺少有参构造器导致的,便又把有参构造器注释掉,再来一次,???怎么还是成功的,难道是因为空参构造器?然后反复测试了几次空参,确认了就是缺少空参构造器导致的,紧接着我似乎意识到了什么,开始扒@Builder的源码,发现其果然是提供了一个有参构造器,从而导致我的DTO缺少了空参构造器
解决方法
在实体类上加上@NoArgsConstructor注解或者添加空参构造器,重启服务即可解决