dubbo调用时发送 java.lang.ClassCastException: java.util.HashMap cannot be cast to com.xxx

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对象进行转换

参考链接:https://zhuanlan.zhihu.com/p/248122719

猜你喜欢

转载自blog.csdn.net/loveyour_1314/article/details/116067724