4.7 深入 Feign

书籍地址: Spring Cloud 微服务架构开发实战

4.7.1 Feign的参数绑定

Feign支持多种注解,我们可以根据需要使用Feign自带的注解或者JAX-RS注解。此外,Spring Cloud 还对 Feign进行了增强,使得Feign支持了SpringMVC注解。

Feign中我们常用的 SpringMVC 注解有:

  • @RequestParam: 绑定单个请求参数值;
  • @PathVariable: 绑定URI模板变量值;
  • @RequestHeader: 绑定请求头数据。
  • @RequestBody: 绑定请求的内容区数据并能进行自动类型转换等。

需要注意的是:

我们在Feign中使用上述注解的时候,value值必须存在。即:

   @RequestMapping(value = "/users/{id}", method = RequestMethod.GET)
    UserDto load(@PathVariable("id") Integer id);

而不能像在controller中那样写:

 @RequestMapping(value = "/users/{id}", method = RequestMethod.GET)
    UserDto load(@PathVariable Integer id){}

这是因为在SpringMVC中这些注解会以参数名称最为默认值,但是 Feign 则不会

在我们进行开发的时候,参数往往是以对象的形式进行传递, 比如注册用户的服务接口如下

User register(User user);

所以微服务中,如何把复杂的用户信息传递过去呢? 答案如下:

@RequestMapping(value="/users/register", method = RequestMethod.POST)
User register(@RequestBody User user);

需要注意的是 User对象必须要有默认构造函数,否则Feign会无法根据传递过来的JSON字符串转换为User对象,从而抛出异常,造成调用不成功.

4.7.2 Feign中的继承

Feign支持继承, 即在我们的示例中, 用户微服务的userService 和 商品微服务的 userService 代码基本一致,类似这种,我们可以单独起一个项目,来封装一个父类, 项目中依赖该jar包,调用或实现该包中UserService的接口方法.这是可以的.

但是,看起来是简化了 Feign的开发, 但是在使用微服务架构进行开发时有一个原则,就是保持各微服务的自治性. 上述的继承, 会造成服务提供方与消费方之间的代码紧耦合.

因此不建议在服务提供方和服务消费方之间共享接口.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值