java B2B2C Springcloud仿淘宝电子商城系统-声明式调用Feign之请求参数
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的统一前缀
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
直播系统源码让您看清现代播放器的架构
随着不同应用场景的增加,直播系统源码定制化功能的需求越来越强。仅仅是直播和点播之间,就存在不同的 buffer 管理、ABR 策略和缓存策略等方面的差别。这些需求催生了一系列更为底层关于多媒体操作 API 的诞生:Flash 上面的 Netstream,HTML5 上的 Media Source Extensions,以及 Android 上的 Media Codec,同时业界又出现了一个基于 HTTP 的标准流格式 MPEG-DASH。这些更高级的能力为开发者提供了更好的灵活性,让他们可以构建适合自己业务需求的播放器和多媒体引擎。直播系统源码到底可以定制这样的现代播放器架构呢,接下来我们就一起来看一看:1.用户界面(UI):这是播放器最上层的部分。它通过三部分不同的功能特性定义了终端用户的观看体验:皮肤(播放器的外观设计)、UI(所有可自定义的特性如播放列表和社交分享等)以及业务逻辑部分(特定的业务逻辑特性如广告、设备兼容性逻辑以及认证管理等)。 2.多媒体引擎:这里处理所有播放控制相关的逻辑,如描述文件的解析,视频片段的拉取,以及自适应码率规则的设定和切换等等,我们将在下文中详细讲...
- 下一篇
java B2B2C Springcloud电子商城系统-Feign负载均衡
1 概述 1.1 介绍 Feign是一个声明式WebService客户端,使用方法时定义一个接口并在上面添加注解即可。Feign支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持SpringMVC和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。 1.2 由来 大部分时间我们都能接受ribbon这种直接调用微服务的方式来获取服务: private static final String REST_URL_PREFIX = "http://MICROSERVICE-DEPT/"; 大家都习惯面向接口编程,比如WebServive,Dao,为了适应广大社区人员提出的面向接口编程原则出现了Feign: 微服务名字获取调用地址。 通过接口加注解获取所需服务。 2 案例 2.1 新建consumer feign服务 导入pom.xml <dependencies> <dependency> <groupId>org.springframework.cloud<...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- MySQL8.0.19开启GTID主从同步CentOS8
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Hadoop3单机部署,实现最简伪集群