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

73677e7f2d19dc761af9fa1a0d4f6d50.png

最近项目中大量使用了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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 的发行版 Ubuntu 的发展简史

Ubuntu&#xff08;又称乌班图&#xff09;是一个是基于 Debian GNU/Linux 的以桌面应用为主的免费开源的 GNU/Linux 操作系统&#xff0c;由全球化的专业开发团队 Canonical 公司打造的。 Ubuntu Linux 是由南非人马克沙特尔沃思(Mark Shuttleworth)创办的基于 Debian Linux的…

linux实验报告五gcc编译,Linux之GCC命令 -- 解析GCC编译的四个过程

在Linux下进行C语言编程&#xff0c;必然要采用GNU GCC来编译C源代码生成可执行程序。Gcc指令的一般格式为&#xff1a;Gcc [选项] 要编译的文件 [选项] [目标文件]。其中&#xff0c;目标文件可缺省&#xff0c;Gcc默认生成可执行的文件名为&#xff1a;编译文件.out看一下经典…

python创建虚拟环境命令_Python创建虚拟环境报错

我使用命令&#xff1a;mkvirtualenv -p python3 test1,创建虚拟环境&#xff0c;然后报错如下()&#xff0c;虚拟机是用nat模式的: Exception: Traceback (most recent call last): File "/home/python/.virtualenvs/test11/share/python-wheels/urllib3-1.13.1-py2.py3-…

java7和java8切换_切换表达式到Java吗?

java7和java8切换已创建一个标题为“ Java语言的开关表达式”的JEP草案 。 当前的“摘要”状态为&#xff1a;“扩展switch语句&#xff0c;以便可以将其用作语句或表达式&#xff0c;并改善switch处理null的方式。 这些将简化日常编码&#xff0c;并为在switch使用模式匹配做好…

Xenix 操作系统的简史

简介 Xenix 是一种UNIX操作系统&#xff0c;可在个人电脑及微型计算机上使用。该系统由微软公司在1979年从美国电话电报公司获得授权&#xff0c;为Intel处理器所开发。后来&#xff0c;圣克鲁兹作业公司&#xff08;SCO&#xff09;收购了其独家使用权&#xff0c;自那以后&a…

servlet 配置 使用_配置HTTPS以与Servlet一起使用

servlet 配置 使用要配置Java EE应用程序以通过HTTPS进行通信&#xff0c;需要在web.xml文件中使用几行XML。 web.xml文件位于项目的WEB-INF目录中&#xff0c;通常在IDE生成Java EE Web应用程序时自动创建。 如果不是&#xff0c;您可以自己创建它。 HTTPS的动机 为Web应用程…

python写接口测试代码_python写运单接口测试(增改查)完整代码

importrequestsimportjsonfrom urllib importparseclassHttpWayBillRquest:运单的增改查 defaccess_token(self):获取tokenurl http://xxxxxxxxx.comusername 12333password 12334566res_json requests.get(url, auth(username, password)).json()print(access_token的结果为&a…

linux终端cd未找到命令,为什么`which`命令不能用于`cd`?我也找不到`cd`的可执行文件!...

问题描述我尝试了which cd&#xff0c;它没有给出路径&#xff0c;而是返回退出代码1(用echo $?检查)。 coreutil cd本身正在工作&#xff0c;所以可执行文件应该在那里&#xff0c;对吧&#xff1f;我还为cd运行了find&#xff0c;但没有显示可执行文件。那怎么实现呢&#x…

Xenix — 微软与UNIX的短暂爱恋

微软向外宣布Microsoft Xenix OS&#xff0c;一个为16位微处理器开发的可移植的操作系统。它是一个交互的&#xff0c;多用户多任务系统&#xff0c;可以运行在Intel 8086, Zilog Z8000, Motorola M68000以及DEC公司的PDP-11系统计算机上。所有微软已经开发的系统软件&#xff…

optionals_Java Optionals获得更具表现力的代码

optionals我们中任何使用允许空引用的语言进行编程的人&#xff0c;都将在尝试取消引用一个引用时经历过。 无论是导致segfault还是NullPointerException&#xff0c;它始终是一个错误。 托尼霍尔将其描述为他十亿美元的错误 。 当函数向客户端的开发人员未预料到的客户端返回空…

python排序sorted_sorted排序的两个方法 - Python

在给列表排序时&#xff0c;sorted非常好用&#xff0c;语法如下&#xff1a; sorted(iterable[, cmp[,key[,reverse]]]) 简单列表排序&#xff0c;很容易完成&#xff0c;sorted(list)返回的对象就是列表结果&#xff0c;但是遇到列表中嵌套元组时&#xff0c;需要使用特殊的方…

linux vim自动执行快捷键,Linux Vim快捷键操作命令整理

VIM中常用的替换模式总结1&#xff0c;简单替换表达式替换命令可以在全文中用一个单词替换另一个单词&#xff1a;:%s/four/4/g“%” 范围前缀表示在所有行中执行替换。最后的 “g” 标记表示替换行中的所有匹配点。如果仅仅对当前行进行操作&#xff0c;那么只要去掉%即可如果…

Mach 微内核的命名趣闻

据 Tevanian 说&#xff0c;MACH&#xff0c;源于一个读音错误。当时他正和其他人在匹兹堡一个下雨天里一边躲避着路上的泥水坑&#xff0c;一边讨论着新内核的事&#xff0c;Tevanian开玩笑地建议他们的新微核命名为MUCK&#xff0c;意为“多用户通信内核”&#xff08;Multi-…

eclipse占用内存过大_Java性能调优学习(三)-jmap+mat分析内存溢出问题实战

上一节我们讲了jinfo&#xff0c;jstat&#xff0c;jmap的使用&#xff0c;还简单的讲了下如何使用jmap导出内存映像文件&#xff0c;这次&#xff0c;我们来实战一把内存溢出问题。环境准备首先我们先模拟一下内存溢出的场景&#xff0c;以下这段代码在访问后肯定会造成堆内存…

spring boot自测_将测微仪与Spring Boot 2一起使用

spring boot自测这是快速入门&#xff0c;介绍了如何使用出色的Micrometer库来检测基于Spring Boot 2的应用程序并在Prometheus中记录指标 介绍 Micrometer在不同监视工具提供的客户端库上提供了基于Java的外观。 以Prometheus为例&#xff0c;如果我要将Java应用程序与Prome…

arch linux界面优化,Archlinux 启动优化

内核参数优化修改/boot/grub/grub.cfg 添加libahci.ignore_sss1 #禁用sssraidnoautodetectipv6.disable1 #禁用ipv6nomodeset #不使用kms&#xff0c;plymouth.enable0 #禁用plymouthrootfstypeext4 #root分区类型selinux0#禁用selinux 完成后&#xff1a;linux /vmlinuz-lin…

微软和 Windows 的发展简史

20世纪60年代中期&#xff0c;美国达特茅斯学院院长、匈牙利人约翰凯梅尼&#xff08;J. Kemeny&#xff09;和数学系教授托马斯卡茨&#xff08;Thomas E. Kurtz&#xff09;认为&#xff0c;像FORTRAN&#xff08;世界上最早出现的计算机高级程序设计语言&#xff09;那样的语…

elaseticsearch 配置ik分词器的热更新_Elasticsearch从入门到放弃:分词器初印象

Elasticsearch 系列回来了&#xff0c;先给因为这个系列关注我的同学说声抱歉&#xff0c;拖了这么久才回来&#xff0c;这个系列虽然叫「Elasticsearch 从入门到放弃」&#xff0c;但只有三篇就放弃还是有点过分的&#xff0c;所以还是回来继续更新。之前我们聊过了 Elasticse…

java api限流_Java 9:流API的增强

java api限流Java 9向Stream接口添加了4种新方法&#xff1a; 1. dropWhile dropWhile方法类似于skip方法&#xff0c;但使用Predicate而不是固定的整数值。 当Predicate为true时&#xff0c;它将从输入流中删除元素。 然后将所有剩余的元素传递到输出流。 例如&#xff1a; …

服务器windows模拟linux环境,科学网—Windows不用虚拟机或双系统,轻松实现shell环境:gitforwindows - 刘永鑫的博文...

windows缺少shell命令支持用过Linux服务器分析数据的小伙伴&#xff0c;一定对Linux强大Shell命令所折服&#xff0c;经常会感觉windows缺少这些命令而感觉不方便。还有想学习Linux Shell命令的小伙伴&#xff0c;一直没有一个很好的学习环境。双系统安装涉及分区改变对硬盘数据…