dubbo调用的时候需要类型转换异常问题
报错: java.lang.ClassCastException: java.util.HashMap cannot be cast to com.xxx.service.request.invoice.InvoiceIssuerInfoSaveRequest$InvoiceIssuerDetailSaveRequest
InvoiceIssuerSaveRequest和InvoiceIssuerInfoSaveRequest为相同属性dto
dubbo消费者:
其中InvoiceIssuerDetailSaveRequest为内部类
dubbo提供者:
获取数据抛出异常
造成原因:
BeanUtils.copyProperties属于浅拷贝 对于引用对象来说 只拷贝了地址值 没有拷贝属性
在dubbo反序列化时 找不到对应类 会将其转换为map
解决方案:
for循环赋值
List<InvoiceIssuerInfoSaveRequest.InvoiceIssuerDetailSaveRequest> detailList = Lists.newArrayList();
request.getDetailList().forEach(item -> {
InvoiceIssuerInfoSaveRequest.InvoiceIssuerDetailSaveRequest detailSaveRequest = new InvoiceIssuerInfoSaveRequest.InvoiceIssuerDetailSaveRequest();
BeanUtils.copyProperties(item, detailSaveRequest);
detailList.add(detailSaveRequest);
});
infoSaveRequest.setDetailList(detailList);
深拷贝
JSON.parseArray(JSON.toJSONString(request.getDetailList(), InvoiceIssuerInfoSaveRequest.InvoiceIssuerDetailSaveRequest.class))