产生问题
后端微服务之间互相调用接口时使用了这样的结构传输数据
public class ApiResult{
private Integer code;
private String desc;
private Object data;
}
某个接口中在data里塞进去了一个Map<Integer,String>的数据实体
Map<Integer, String> noticeFailedMap = new HashMap<>();
...
result.setData(noticeFailedMap);
但是在数据转化的时候就出了问题。
Map<Integer,String> noticeFailedMap = (Map<Integer, String>) getApiResult.getData();
List<String> failIdList= new ArrayList<>(noticeFailedMap.keySet());
if(failIdList.contains(employeeMealsDetail.getId())){...}
一开始强制转化为Map<Integer,String>,但是在if判断的时候 抛出了
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
解决办法以及可能原因
做了一些测试以及log之后,猜测具体问题出现在Map->Object->Map的过程中,于是把接收端的实体改成了
Map<String,String> noticeFailedMap = (Map<String, String>) getApiResult.getData();
List<String> failIdList= new ArrayList<>(noticeFailedMap.keySet());
if(failIdList.contains(employeeMealsDetail.getId().toString())){...}
具体的问题原因没有去细究整个转换过程的类型变化。