在谷粒商城学习——P20-27springcloud alibaba课程中已经学过openfeign调用远程服务的基本示例,重复的不在赘述
被调用的远程controller接口指定了@PostMapping和@RequestBody,则调用的时候也需要指定这两个注解以保证签名一致
关键代码:
SpuBoundsController:接口提供方
@RestController @RequestMapping("coupon/spubounds") public class SpuBoundsController { @Resource private SpuBoundsService spuBoundsService; @PostMapping("/save") public R save(@RequestBody SpuBoundsEntity spuBounds){ spuBoundsService.save(spuBounds); return R.ok(); } }View Code
CouponFeignService:调用方的接口,指定远程调用信息
@FeignClient("gulimall-coupon") public interface CouponFeignService { /** * 1、CouponFeignService.saveSpuBounds(spuBoundTo); * 1)、@RequestBody将这个对象转为json。 * 2)、找到gulimall-coupon服务,给/coupon/spubounds/save发送请求。 * 将上一步转的json放在请求体位置,发送请求; * 3)、对方服务收到请求。请求体里有json数据。 * (@RequestBody SpuBoundsEntity spuBounds);将请求体的json转为SpuBoundsEntity; * 只要json数据模型是兼容的。双方服务无需使用同一个to */ @PostMapping("/coupon/spubounds/save") R saveSpuBounds(@RequestBody SpuBoundTo spuBoundTo); }View Code
SpuInfoServiceImpl:调用具体实现
@Resource private CouponFeignService couponFeignService; @Override public void savesupInfo(SpuSaveVo vo) { SpuBoundTo spuBoundTo = new SpuBoundTo(); R r = couponFeignService.saveSpuBounds(spuBoundTo); }View Code