首页 文章 精选 留言 我的

精选列表

搜索[声明式模型],共10009篇文章
优秀的个人博客,低调大师

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的统一前缀 java B2B2C Springcloud仿淘宝电子商城系统

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册