项目场景:
谷粒商城(gulimall)
SpringCloud项目:
gulimall-ware
服务传值(List<SkuHasStockVo>
)给gulimall-product
服务- 微服务之间的传值问题
问题描述:
在服务之间传值,并且获取到相应的类型。相应的解决方案:
- R设计的时候可以加上泛型
- 直接返回我们想要的结果
List<SkuStockVo>
(实现简单,不做说明) - 自己封装解析结果(实现简单,不做说明)
主要使用R添加泛型方法解决问题
/**
* 利用FastJSON 实现
* @param TypeReference<T> type
* @param <T>
* @return
*/
public <T> T getData(TypeReference<T> type){
Object data = get("data");
String s = JSON.toJSONString(data);
T t = JSON.parseObject(s, type);
return t;
}
public R setData(Object data) {
this.put("data", data);
return this;
}
gulimall-ware服务: 传入值
@ApiOperation(value = "根据skuIds查询这些sku的库存")
@PostMapping("/getSkusHasStock")
public R getSkusHasStock(@RequestBody List<Long> skuIds) {
List<SkuHasStockVo> skuStockVos = wareSkuService.getSkusHasStock(skuIds);
return R.ok().setData(skuStockVos);
}
gulimall-product服务: 取值
@Override
public void up(Long spuId) {
// 4. 远程调用库存系统,判断商品是否还有库存
/**
* try catch 防止远程调用超时报错
*/
try {
R r = wareFeignService.getSkusHasStock(skuIds);
// 构造取值类型
TypeReference<List<SkuHasStockVo>> typeReference = new TypeReference<List<SkuHasStockVo>>() {
};
List<SkuHasStockVo> data = (List<SkuHasStockVo>) r.getData(typeReference);
} catch (Exception e) {
log.error("远程调用库存服务异常:{}", e);
}
}