照着实现的时候,发现报了空指针错误,定位以后发现:
远程调用以后这个给统一返回对象R加上泛型以后,获取不到data值,这里data为空
debug发现查询是否有库存时,这个vos是有值的,这里将vos设置进data时候出了问题:
可以看到,在经过setData以后,R的返回值里面只有msg和code,并没有data。
这里需要修改公共模块中R的data方法,注释掉原来的data构造参数,并新增以下代码
public R setData(Object data) {
put("data",data);
return this;
}
//利用fastjson进行反序列化
public <T> T getData(TypeReference<T> typeReference) {
Object data = get("data"); //默认是map
String jsonString = JSON.toJSONString(data);
T t = JSON.parseObject(jsonString, typeReference);
return t;
}
//利用fastjson进行反序列化
public <T> T getData(String key,TypeReference<T> typeReference) {
Object data = get(key); //默认是map
String jsonString = JSON.toJSONString(data);
T t = JSON.parseObject(jsonString, typeReference);
return t;
}
这样改造完R对象以后,就可以正常使用setData方法往R对象里面设置参数data:
在取出值的时候,通过以下方式可以get到设置进去的data数据:
R skusHasStock = wareFeignService.getSkusHasStock(skuIdList);
TypeReference<List<SkuHasStockVo>> typeReference = new TypeReference<List<SkuHasStockVo>>() {
};
List<SkuHasStockVo> data = skusHasStock.getData(typeReference);