dubbo调用时总是出现这个错,但是代码中无明显错误
java.lang.ClassCastException: java.util.HashMap cannot be cast to com.example.testerror.pojo.RegisterUserDTO$FileInfo
原因:
在对对象进行转换时使用BeanUtils.copyProperties()
底层原因:
原来是BeanUtils是浅拷贝造成的。浅拷贝只是调用子对象的set方法,并没有将所有属性拷贝。(也就是说,引用的一个内存地址)。所以将在进行调用时,Dubbo因为反序列化时找不到对应的类,就会将其转换为Map。
RegisterUserDTO registerUserDTO = new RegisterUserDTO();
BeanUtils.copyProperties(users, registerUserDTO);
userServive.saveUser(registerUserDTO);
解决方案:
不能使用任何浅拷贝的方式转换对象
- 可以封装一个方法,自己一个一个赋值实现对象转换;
- 使用mapstruct对象进行转换