产生问题

后端微服务之间互相调用接口时使用了这样的结构传输数据

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())){...}

具体的问题原因没有去细究整个转换过程的类型变化。