文档章节

java B2B2C Springcloud仿淘宝电子商城系统-声明式调用Feign之请求参数

明理萝
 明理萝
发布于 2019/05/05 09:45
字数 921
阅读 78
收藏 0

1、Feign请求参数说明

  电子商务平台源码请加企鹅求求:一零三八七七四六二六。Feign是Netflix的产品,Spring Cloud Feign是在原生Feign的基础上进行了封装。由于Spring Cloud Feign引入了许多springmvc的注解,方便springmvc的使用者使用,但同时也给使用者带来了很大的混淆,下面我们简单讲解一下springmvc和Spring Cloud Feign的参数绑定机制。

1.1 SpringMVC请求参数绑定机制

  我们通过下面的例子进行讲解:

@RestController
public class demoController{
  @RequestMapping("hello")
  public String hello(String name){
    return "hello"+name;
  }
}

虽然接口很简单,但是SpringMVC在解析请求时为做了很多的事情

@RequestMapping指定请求的路径映射,我们GET,POST,DELETE,PUT的请求都可以映射到这里;

SpringMVC提供的参数注解包括@RequestParm,@RequestBody,@PathVariable等,在例子中我们的参数name被默认添加@RequestParm注解,SpringMVC使用字节码技术获取name这个名称,自动检测请求参数中key值为name的参数,如果我们的url请求或者form表单中包含name这个参数,就会被SpringMVC解析到。

1.2 Spring Cloud Feign请求参数绑定机制

  SpringMVC的参数绑定机制和Feign的参数绑定机制是不一样的。下面我们看一个错误的例子:

假如有这样一个api:

@ResstController
public class demoController{
  @RequestMapping(value="hello",method=RequsetMethod.GET)
  public String hello(String name){
    return "hello"+name;
  }

Feign 访问这个api

@FeignClient(name = "hello")  
public interface IHelloService {  
  @RequestMapping(value = "/hello",method = RequestMethod.GET)  
  String hello (String name);  
}  

由于我们指定了请求方式GET,那么如果按照SpringMVC的参数绑定机制,name参数会被拼接在URL上,但是接口并未接收到,查看后台日志发现:

请求方式不是GET,而是POST

name 参数为null

经过Google发现Feign的参数绑定机制与SpringMVC不同:

Feign默认使用@RequestBody,这就是上面name参数为null的原因,@RequestBody(只能有一个)一般用于传递对象,如果参数中出现多个对象可以使用Map来传递对象

@FeignClient(name = "hello")  
public interface IHelloService {  
  @RequestMapping(value = "/hello",method = RequestMethod.GET)  
  String saveBook(@RequestBody Book book);  
}  
@FeignClient(name = "hello")  
public interface IHelloService {  
 @RequestMapping(value = "/hello",method = RequestMethod.GET)  
 String saveMap(@RequestParm Map map);  
}  

Feign传递name参数,必须添加@RequestParm('name'),name必须指定,Feign不会利用SpringMVC字节码的机制自动给定一个默认名称

@FeignClient(name = "hello")  
public interface IHelloService {  
  @RequestMapping(value = "/hello",method = RequestMethod.GET)  
  String hello (@RequestParm('name') String name);  
}

2、@FeignClient注解与参数

  @FeignClient注解被@Target(ElementType.TYPE)修饰,表明@FeignClient注解的作用在接口上

2.1 @FeignClient标签常用属性

name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现

decode404:当发生http 404错误时,如果该字段位true,会调用decoder进行解码,否则抛出FeignException

configuration: Feign配置类,可以自定义Feign的Encoder、Decoder、LogLevel、Contract

fallback: 定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口

fallbackFactory: 工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码

path: 定义当前FeignClient的统一前缀

© 著作权归作者所有

明理萝
粉丝 73
博文 374
码字总数 356037
作品 0
深圳
私信 提问
加载中

评论(1)

明理萝
明理萝 博主
希望可以帮助到大家~~
企业分布式微服务云SpringCloud SpringBoot mybatis (三) 服务消费者(Feign)

一、Feign简介 Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持...

2019/01/15
0
0
Spring MVC项目使用Feign声明式服务调用

Spring MVC项目使用Feign声明式服务调用 什么是声明式服务调用? 拆分成 什么声明式? 可以从编程范式入手了解: 编程范式: 命令式编程(Imperative Programming) 声明式编程(Declarative Pro...

suveng
2019/07/15
93
0
java B2B2C 源码 多级分销Springcloud多租户电子商城系统-Spring Cloud eureka

在构建项目之前,我们先学习一下eureka,这是官方的讲解,我这边再重新帮大家回顾一下:需要源码可以加企鹅球球:一零三八七七四六二六 来源: java B2B2C 源码 Springcloud多租户电子商城系...

park
2019/01/15
0
0
Java B2B2C o2o多用户商城 springcloud架构:服务消费(Feign)

Spring Cloud Feign Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端。它使得编写Web服务客户端变得更加简单。我们只需要通过创建接口并用注解来配置它既可完成对Web...

park
2019/01/21
0
0
SpringCloud 基础教程(八)-Hystrix熔断器(上)

  我的博客:程序员笑笑生,欢迎浏览博客!  上一章 SpringCloud基础教程(七)-声明式服务调用Fegign当中,我们介绍了使用Fegin更加简化的实现服务间的调用.本章节我将继续探索Hystrix组件的...

程序员笑笑生
01/31
31
0

没有更多内容

加载失败,请刷新页面

加载更多

vue运行机制总结

new Vue()运行之后,Vue调用_init函数进行初始化,初始化生命周期,事件,props,methods,data,computed,watch等 其中最重要的是通过Object.defineProperty设置setter和getter函数,用来 实现...

东东笔记
15分钟前
21
0
“InitializeComponent”名称在当前上下文中不存在[关闭]

如果我在Visual Studio 2010 SP1中创建一个新项目并选择“WPF应用程序”并尝试生成生成的应用程序,我会收到错误 当前上下文中不存在名称“InitializeComponent”。 今天早上,当我尝试构建当...

技术盛宴
19分钟前
44
0
Vue 列表与表格高亮设置

点击li 元素设置高亮的方法 <li v-for="(item,index) in lists" :key="index" :class="{ activeLi: currentLi == item }" @click="handleClick(index)" class="pointer"> ......

tianyawhl
21分钟前
29
0
Linux驱动开发-串口驱动

参考资料: 《LINUX设备驱动程序第三版》 linux-5.4.9 0.前言 在今天终于离职了,办完了所有的手续,感觉一身轻松,在上一家公司,作为一名程序员,已经在偏离写代码开发的歪门邪道上越走越远...

大丽水手吃卤蛋
21分钟前
29
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部