最近项目中大量使用了Spring Cloud Feign来对接http接口,踩了不少坑,也产生了一些对RESTFUL接口设计的想法,特此一篇记录下。

SpringMVC的请求参数绑定机制

了解Feign历史的朋友会知道,Feign本身是Netflix的产品,Spring Cloud Feign是在原生Feign的基础上进行了封装,引入了大量的SpringMVC注解支持,这一方面使得其更容易被广大的Spring使用者开箱即用,但也产生了不小的混淆作用。所以在使用Spring Cloud Feign之前,笔者先介绍一下SpringMVC的一个入参机制。预设一个RestController,在本地的8080端口启动一个应用,用于接收http请求。

@RestControllerpublic class BookController { @RequestMapping(value = "/hello") // <1> public String hello(String name) { // <2> return "hello " + name; }}

这个接口写起来非常简单,但实际springmvc做了非常多的兼容,使得这个接口可以接受多种请求方式。

<1> RequestMapping代表映射的路径,使用GET,POST,PUT,DELETE方式都可以映射到该端点。

<2> SpringMVC中常用的请求参数注解有(@RequestParam,@RequestBody,@PathVariable)等。name被默认当做@RequestParam。形参String name由框架使用字节码技术获取name这个名称,自动检测请求参数中key值为name的参数,也可以使用@RequestParam(“name”)覆盖变量本身的名称。当我们在url中携带name参数或者form表单中携带name参数时,会被获取到。

POST /hello HTTP/1.1Host: localhost:8080Content-Type: application/x-www-form-urlencodedname=formParam

GET /hello?name=queryString HTTP/1.1Host: localhost:8080

Feign的请求参数绑定机制

上述的SpringMVC参数绑定机制,大家应该都是非常熟悉的,但这一切在Feign中有些许的不同。

我们来看一个非常简单的,但是实际上错误的接口写法:

//注意:错误的接口写法@FeignClient("book")public interface BookApi { @RequestMapping(value = "/hello

feignclient注解使用_从 Feign 使用注意点到 RESTFUL 接口设计规范相关推荐

  1. python restful服务部署_用python为mysql实现restful接口

    编辑推荐: 本文来自于朱念洋 ,文中针对游戏服务层的案例详细介绍的,代码描述详细. 最近在做游戏服务分层的时候,一直想把mysql的访问独立成一个单独的服务DBGate,原因如下: 请求收拢到DBGa ...

  2. c#分页_使用Kotlin搭配Springboot开发RESTFul接口(二)自定义配置、跨域、分页

    前言 上一篇文章请看这里:使用Kotlin搭配Springboot开发RESTFul接口与服务部署 上一篇文章介绍了Kotlin搭配Springboot的开发流程,从搭建项目.ORM.Controll ...

  3. python实现restful接口_使用python为mysql实现restful接口

    最近在做游戏服务分层的时候,一直想把mysql的访问独立成一个单独的服务DBGate,原因如下: 请求收拢到DBGate,可以使DBGate变为无状态的,方便横向扩展 当请求量或者存储量变大时,mys ...

  4. springboot中接口实例化_无规矩不成方圆,聊一聊 Spring Boot 中 RESTful 接口设计规范...

    在设计接口时,有很多因素要考虑,如接口的业务定位,接口的安全性,接口的可扩展性.接口的稳定性.接口的跨域性.接口的协议规则.接口的路径规则.接口单一原则.接口过滤和接口组合等诸多因素,本篇文章将简要分 ...

  5. @FeignClient注解 中属性 contextId使用

    如果我们使用Feign定义了两个接口,但是目标服务是同一个,那么在SpringBoot启动时就会遇到一个问题: Description: The bean 'optimization-user.Fei ...

  6. Spring Cloud 中的@FeignClient注解中的contextId属性

    在使用@FeignClient注解前,我们需要先引入其相关依赖,版本为3.0.1 <dependency><groupId>org.springframework.cloud& ...

  7. Spring Cloud 中的@FeignClient注解

    @FeignClient:属于Spring Cloud技术架构体系中的一个注解,其作用是可以让当前服务调用其它应用服务的接口,相比于RestTemplate使用起来更加灵活. 在使用@FeignCli ...

  8. java spring boot 注解验证_如何理解Java原生注解和Spring 各种注解?

    作者:digdeep .cnblogs.com/digdeep/p/4525567.html 导引 Spring中的注解大概可以分为两大类: spring的bean容器相关的注解,或者说bean工厂相 ...

  9. Spring Cloud Feign Clients 无需 Controller自动暴露Restful接口

    前言 在开发SpringCloud应用中,Feign作为声明式调用的事实标准极大的简化了Rest远程调用,提供了类本地化的调用方式.服务提供方的接口暴露方式是通过Controller暴露Restful ...

最新文章

  1. 【毕业论文写作】宗老师《如何撰写毕业论文?》27页ppt
  2. Spring Cloud Gateway重试机制
  3. mysql combat_LICENSE · 爱是与世界平行/mysqlActualCombat - Gitee.com
  4. NewCode----句子反转
  5. vue 树形控件可编辑_vue.js element-ui组件改iview 第一期 tree树形控件
  6. 转载------工作10年的人总结的6句话
  7. 最完整的MySQL规范
  8. Redis学习总结(14)——图解redis五种数据结构底层实现(动图版)
  9. 吴恩达机器学习练习2:Regularized logistic regression
  10. 现在入坑 AI 太迟?这些程序员发现了掘金新出路
  11. C++11 auto类型说明符
  12. Windows服务器配置DFS实现文件同步
  13. 在地图上点击一下,在图层上画一个点,并显示相关的信息
  14. cdr添加节点快捷键_史上最全CDR快捷键命令汇总
  15. 计算机的英语歌,好听的英文歌,该怎么解决
  16. 半导体车间净化工程的空气洁净度划分等级
  17. python中的TypeError错误解决办法
  18. osi七层语言html,OSI分为哪七层 OSI七层功能介绍【详解】
  19. CentOS7 添加开机启动项
  20. 精选(63) 面试官:说一下的 dubbo 的工作原理?注册中心挂了可以继续通信吗?说说一次 rpc 请求的流程?

热门文章

  1. python kotlin_Java和Python中类似Kotlin的生成器,续:附加参数
  2. 获取http请求标头_HTTP请求和标头参数的CDI拦截器–简单示例
  3. hibernate查询缓存_Hibernate查询缓存如何工作
  4. 使用Spring Security进行简单身份验证
  5. OCA第1部分中的Java难题
  6. spring发邮件_跟踪异常–第4部分– Spring的邮件发件人
  7. Derby数据库备份
  8. 服务网格:Istio和AWS App Mesh
  9. Spring Boot – spring.config.name –案例研究
  10. 高可用性(HA),会话复制,多VM Payara群集