1.在目标应用的启动类上添加开启远程fein调用注解:
2.添加一个feign调用的interface
@FeignClient("gulimall-coupon")
public interface CouponFeignService {@PostMapping("/coupon/spubounds/save")R save(@RequestBody SpuBondTo spuBounds);
}
接口上添加注解@FeignClient,括号内填入要远程调用的微服务应用名application name;
3.添加要调用远程服务controller里对应的方法声明,注意是方法声明,没有方法体,这一步需确保:
1.http请求方法要一致,源方法用get请求,调用处也要用get请求;
2.http请求方法路径要完整,@GetMapping和@PostMapping里的路径地址
3.传参方式要一致,比如@RequestBody,@RequestParam,@PathVariable;
4.返回值要一致;
需要特别指出的是像@RequestBody传参,源方法和feignClient调用处可用不同的对象,只要保证这2个对象有业务需要的部分相同属性即可。
下面贴上代码方便理解
Controller里的方法:
@RestController
@RequestMapping("coupon/spubounds")
public class SpuBoundsController {@Autowiredprivate SpuBoundsService spuBoundsService;@PostMapping("/save")public R save(@RequestBody SpuBoundsEntity spuBounds){spuBoundsService.save(spuBounds);return R.ok();}
SpuBondTo 实体类(前端传参对象)
@Data
public class SpuBondTo {private Long spuId;private BigDecimal buyBounds;private BigDecimal growBounds;
}
controller里的传参,对应数据库表的实体类
@Data
@TableName("sms_spu_bounds")
public class SpuBoundsEntity implements Serializable {private static final long serialVersionUID = 1L;/*** id*/@TableIdprivate Long id;/*** */private Long spuId;/*** 成长积分*/private BigDecimal growBounds;/*** 购物积分*/private BigDecimal buyBounds;/*** 优惠生效情况*/private Integer work;}
这2个对象中有3个属性是一致的,如此部分属性相同即可实现Feign远程调用伟参,当然传同一类型的实体更不用说了。