前言
今天下午,当我经过一个小时的奋”键“疾”码“,准备好好的审查一下(摸鱼)自己写的代码,经过一段时间审查(摸的差不多了,该下班了),得出一个结论我写的代码很优雅、精简。所以大手一挥提交代码,并在API管理系统上将xxx接口点了个完成。准备收拾东西走人了准点下班。然而事与愿违,没过多久前端大哥就@我了,说xxx接口有问题,麻烦处理一下。内心第一反应(你丫的参数传错了吧)卑微的我只能默默的回个,好的、麻烦把参数给我一下,我这边检查一下[微笑脸]。
场景还原
经过测试,发现确实是我的问题。还好没甩锅,要不然就要被打脸了。错误信息如下:
{
"code": "010000",
"message":"java.util.HashMap cannot be cast to com.aixiao.inv.common.dto.tax.AddEmployeeDTO$Employee",
"data": null
}
看到这个错误有点懵,HashMap
无法转换为AddEmployeeDTO$Employee
。内心在想,没道理啊。请求参数我都是拷贝过来的,压根就没用Map
进行参数传递。毕竟我都是个老手了,咋可能犯这样愚蠢的错误。俗话说遇到问题不要慌,让我们掏出手机先发个朋友圈,不对好像有点跑题了,我们先看一下调用链的数据传递。
首先web将AddEmployeeForm
数据传递到服务端,然后使用fromToDTO()
方法,进行将数据转换为Dubbo请求需要的AddEmployeeDTO
。Dubbo服务放接收AddEmployeeDTO
后,使用 EmployeeConvert
将数据转换为AddEmployeeXmlReq
再执行相关逻辑。
AddEmployeeForm类
@Data
public class AddEmployeeForm implements Serializable {
/**
* 职员信息列表
*/
private List<Employee> employees;
@Data
public static class Employee implements Serializable {
/**
* 姓名
*/
private String name;
/**
* 工作
*/
private String job;
}
}
FormToDTO()方法
public <T, F> T formToDTO(F form, T dto) {
// 进行数据拷贝
BeanUtils.copyProperties(form, dto);
// 返回数据
retu