专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

OpenFeign要被HttpExchange替代了吗?

  前言
  Http是最常见的请求协议,每种编程语言都可发送Http请求。Java作为经典编程语言之一,发送Http请求的客户端更是不少,自己的内置的就有java。net。HttpURLConnection以及Java11以后的java。net。http。HttpClient。在Java11之前,HttpURLConnection很难用,因此市场上百花齐放出现了不少优秀的开源作品,典型代表为:ApacheHttpClient(现最新为HttpComponent5。x)OkHttp(现最新为OkHttp4。x)
  作为老牌的ApacheHttpClient凭借着各种优秀特征,似乎已成为了事实的标准;后起之秀OkHttp不带历史包袱的轻装上路,有着低网络延迟、更优秀的连接池性能,亦是一股不可轻视的力量。
  Spring不到万不得已之时,一般不会自己重复造轮子。在Http客户端这块一样借力打力,提供Http统一调用方式RestTemplate,屏蔽了细节,规范了开发者的使用,简化了开发门槛。
  PS:RestTemplate的底层实现依旧是ApacheHttpClient、OkHttp、HttpURLConnection之一
  以上,都还是编程式Http客户端。随着SpringBoot的普及,SpringCloud的出现,声明式编码变得越来越主流,因为声明式面向元数据编码效率远高于编程式编码效率。因此,Feign出现了,迅速成为了主流。
  今年,随着划时代版本SpringFramework6、SpringBoot3、SpringCloud2022。0。0的发布,Spring团队自建了一套声明式Http客户端:HttpExchange,目标直指OpenFeign。正文
  全新的声明式Http客户端由SpringFramework6提供定义,SpringBoot3提供实现,SpringCloud2022负责发扬光大。今天我们就来体验一把介绍一个免费的、在线的RestHttp服务
  由于我们需要一个提供HttpServer来提供接口服务,为此先给你介绍一个免费的、24h在线的RestHttp服务,省去我们自己搭建的麻烦。
  地址:jsonplaceholder。typicode。com
  每月提供近20亿的请求,关键还是免费的、可公开访问的,好用得不要不要。
  发一个简单的Http请求,就能获取到数据。URL遵循Rest规范:
  不挑Http或者Https,比如使用浏览器访问这个URL得到的结果也是一样的:
  它提供多个Resources资源(以及多种Routes)供以访问,对这些资源进行增删改查的操作,你想要的绝大部分都能满足你。当然,若你需要mockdata是符合自己的数据结构、业务逻辑的,可基于此项目做简单的修改即可,良心项目啊。具体详情自行去官方体验:https:jsonplaceholder。typicode。com。全新声明式Http客户端HttpExchange
  环境声明:SpringBoot3。0。x
  本文选用albums资源进行测试:https:jsonplaceholder。typicode。comalbums的请求结果结构如下:
  Feign代码示例
  略!Feign的使用,相信大家再熟悉不过了,笔者这里就不费周章。HttpExchange代码示例
  按照albums的返回数据结构,写JavaBean:
  复制在此处添加备注信息authorYourBatmansince0。0。1BuilderGetterpublicclassAlbumsReq{NotNullPositiveprivateLonguserId;NotBlankprivateStringtitle;}在此处添加备注信息authorYourBatmansince0。0。1SetterToStringpublicclassAlbumsResp{privateLongid;privateLonguserId;privateStringtitle;}1。2。3。4。5。6。7。8。9。10。11。12。13。14。15。16。17。18。19。20。21。22。23。24。25。26。27。28。29。30。
  顺带科普一个编码规范:请求体Req中get方法是必须的,set方法可选;响应体Resp中set方法是必须的,get方法可选;二者都需遵循JavaBean规范!粗暴的做法是不管需求如何,getset一把梭,可行,但作为程序员的你应该知道原由,理解要义。
  导入webflux包此声明式客户端又SpringFramework6提供,但由于其并未提供实现。SpringBoot3为此提供了基于Reactive的Web实现,因此需要导入webflux包:
  复制dependencygroupIdorg。springframework。bootgroupIdspringbootstarterwebfluxartifactIddependency1。2。3。4。
  编写Http客户端申明式接口。
  复制在此处添加备注信息authorYourBatmansince0。0。1HttpExchange(albums)publicinterfaceAlbumsClient{GetExchangeListgetAll();GetExchange({id})AlbumsRespgetById(PathVariableLongid);PostExchangeAlbumsRespadd(RequestBodyValidAlbumsReqreq);}1。2。3。4。5。6。7。8。9。10。11。12。13。14。15。16。17。18。19。
  书写测试用例代码。
  复制SpringBootTestclassApplicationTests{AutowiredprivateAlbumsClientalbumsClient;TestvoidcontextLoads(){System。out。println(getAllsize:albumsClient。getAll()。size());System。out。println(getById1:albumsClient。getById(1L));创建一个ObjectaddedRespalbumsClient。add(AlbumsReq。builder()。userId(1L)。title(diyadd。。。)。build());System。out。println(创建的allAlbums对象为:addedResp,现在总数为:albumsClient。getAll()。size());}}1。2。3。4。5。6。7。8。9。10。11。12。13。14。15。16。17。18。
  运行测试代码,控制台输出:
  复制getAllsize:100getById1:AlbumsResp(id1,userId1,titlequidemmolestiaeenim)创建的allAlbums对象为:AlbumsResp(id101,userId1,titlediyadd。。。),现在总数为:1001。2。3。
  完美!
  小细节:创建的时候并未制定id,发现id是自增的(id101)。但这并不会保存在typicode。com的远端服务器了,不会引起总条数的变化。HttpExchange声明式客户端简析
  HttpExchange是SpringFramework6新提供的声明式Http客户端,客户端的要素由注解的属性方法签名来定义。先来看看这个注解:
  复制Since:6。0Target({ElementType。TYPE,ElementType。METHOD})Retention(RetentionPolicy。RUNTIME)DocumentedMappingReflective(HttpExchangeReflectiveProcessor。class)publicinterfaceHttpExchange{AliasFor(url)Stringvalue()default;AliasFor(value)Stringurl()default;Stringmethod()default;StringcontentType()default;String〔〕accept()default{};}1。2。3。4。5。6。7。8。9。10。11。12。13。14。15。16。17。
  和RequestMapping参照对比:
  复制Target({ElementType。TYPE,ElementType。METHOD})Retention(RetentionPolicy。RUNTIME)DocumentedMappingReflective(ControllerMappingReflectiveProcessor。class)publicinterfaceRequestMapping{Stringname()default;AliasFor(path)String〔〕value()default{};AliasFor(value)String〔〕path()default{};RequestMethod〔〕method()default{};String〔〕params()default{};String〔〕headers()default{};String〔〕consumes()default{};String〔〕produces()default{};}1。2。3。4。5。6。7。8。9。10。11。12。13。14。15。16。17。18。19。
  不说一毛一样,也是基本一样。HttpExchange注解可以标注在类上和方法上,最终的URL组合起来生效。大家都是使用过Feign、使用过SpringMVC的,这就不用过多介绍了。
  和RequestMapping一样,HttpExchange也有其派生注解:GetExchange:GET请求。类似于于GetMappingPostExchange:Post请求。类似于于PostMappingPutExchange:Put请求。类似于于PutMappingDeleteExchange:Delete请求。类似于于DeleteMappingPatchExchange:Patch请求。类似于于PatchMappingHttpExchange声明式客户端前景展望
  通过interface这种声明式使用起来比RestTemplate,或者WebClient要简单很多,大大简化了开发步骤,对开发者更加友好。
  最新发布的SpirngCloud2022。0。0里描述得很明白:停止对OpenFeign的特征支持。言外之意:OpenFeign即将被SpringCloud淘汰,接棒的那必然是HttpExchange喽。所以在可预见的将来,前景一片大好。
  但是,笔者认为它还不够成熟,主要有两点:还不能支持SpringWeb的注解(RequestMapping体系),若能支持个人觉得会更为方便。目前还只有WebClient一套实现(由SpringBoot提供实现),而它属于ReactiveWeb体系,也就是必须引入webFlux相关技术,而webFlux在做业务开发时优势不明显,并非主流。因为若WebClient能从ReactiveWeb里剥离出来,笔者觉得就好很多了。总结
  谁能想到,OpenFeign竟然都快被淘汰了,Spring的大船滚滚向前,引领着整个潮流,逐渐暴露出了野心,或者说感受到了危机。
  先抄袭,再超越,Spring做到了。隐藏在全新的声明式客户端背后,其实还有SpringFramework6背后对WebMapping体系的重构,细心的你或许已有所发现。这些话题、新发现,留予笔者和你后续接着聊。
  原文链接:https:www。51cto。comarticle743079。html

为什么皖南的人不喜欢去合肥而喜欢去江浙沪发展?别说皖南了,就连一些合肥人都不愿意待在合肥,跑到江浙沪去发展,主要原因就是合肥目前还属于发展阶段,相较于江浙沪,工资低,产业少,岗位少。即使合肥发展起来了,毕竟只是一个市,也不会容我今年46岁已买社保7年,还有4年就到退休年龄,现又没有上班该不该自己买下去?你今年46岁已买社保7年,还有4年达到退休年龄,当然应该继续买下去。不继续买下去,就意味着你今后无法办理退休,到了退休年龄只能按照退保处理,那是非常不划算的额,下面和你分享我的个人为什么有些退休老人的养老金比现在多数年轻人的工资高,合理吗?怎么不合理呢?退休人员交了一辈子社保,怎么就不能享受养老待遇呢?年轻人工资少不是个人能力的原因吗,跟养老金有什么关系?这问题提的真是low。年轻人工资低是多个原因造成的,但唯独和养你知道农村老人们捣艾草用来干嘛吗?艾草,是我们农村野外最为常见的野草之一,过去农村人就有在端午节前后收割艾草的习惯。将艾草割回家以后晒干存放,一般是放个三五年以后,才会用石臼将艾草反复捣舂,制成艾绒。所以,农村老人沈阳轻轨计划挺进市内,你会乘坐吗?近日,有媒体报道,辽宁省住房和城乡建设厅宣布浑南现代有轨电车将向老城区延伸。目前,已规划东部滨水线和西部滨水线,两条有轨电车线路。西部滨水线起点是奥体中心,终点沈阳站。东部滨水线,在邢台这个四线城市房价7000多了,值不值得买?不值得买。一个城市的住房是否值得购买一个要看经济形势,一个要看居住环境。经济形势河北省2019年人均GDP为4。67万元,排名全国倒数第六。从河北省内来看,邢台以2。87万元的人均我生完孩子生育保险报下来,单位说上班后才发放生育津贴,但是实际情况上不了班,怎么办?是的,休完产假需要回去上班一个月后才能申请领取,我生孩时就是又回原单位上班后来领到了,比我早生几个月的一个同事,由于没人带孩她选择没回公司上班,她想领生育津贴,结果因为她跟公司领导我国有多少所公安院校?目前,我国共有35所公安院校,其中,部属院校5所,地方院校30所,仅海南省没有公安院校。下面,我按照部属院校地方本科院校地方专科院校分别进行介绍。第一类部属院校,共5所1中国人民公你赞成社区养老吗?你对社区养老有何建议?这个问题出的比较模糊不清的问题,我是反对社区养老模式的,就是几个原因。一是什么叫社区,这个概念就是模糊不清的,可能是居民住宅区居委会吧,可是居委会是居民自治组织,没有钱财,没有法定为什么美国人老了不用担心赡养问题,他们是如何度过这段时光的?全民皆有養老金,不光是美国人,甚至在美国生活过工作过几年的外国人,在回国后到了退休年龄后便有养老金。美国人和呈在美国工作过的外国人,到了63岁(还是65岁?)便可以领取养老。领取人老师留作业让家长检查并签字,这种做法对吗?我是小老师的闲言碎语,我来回答这个问题。给孩子的作业签字,我也是经常签,主要是小学阶段。偶尔,我还会给孩子的作业写上评语。孩子的作业很认真书写清秀,我每次签字的时候都是工工整整地把
除了经典款,鬼冢虎还有什么选择?每周冷门球鞋大赏哈喽各位,今天又是由Austin给大家主持本期的冷门球鞋大赏。我想问问大家在现在复古回潮的趋势下,还有没有什么小众的复古品牌在角落里等着我们去发掘呢?诶,我想给OnitsukaTi有痘痘该怎么办,为什么会长痘痘?痘痘最大的忌讳就是油脂分泌旺盛,从而导致毛孔堵塞,与空气氧化后发炎就形成了痘痘,痘痘不改善是没办法自愈的,有很多青春期的孩子以为长痘后过了青春期就可自愈,在这严肃的跟你们讲是没办法阿迪达斯ResponseCL混搭绿色绒面革层叠阿迪达斯响应CL阿迪达斯ResponseCL曾经是90年代的主要跑鞋,现在为未来的街头服饰重新制作,一年四季都与BadBunny合作。许多著名的爸爸剪影之一正在回想起凉爽的穿着演绎你想要的,未必是你需要每个人都有特别喜欢某样东西,想要拥有某样东西,你所喜欢的东西,并不一定是最好的,但你就是念念不忘恋恋不舍。很多时候是不曾拥有,所以特别想占有有些时候也只是单纯地喜欢而已。正所谓萝卜宽容大度宽容大度是一种赢得人心的谋略关于弥勒佛有这样一句话开口便笑,笑古笑今,凡事付之一笑大肚能容,容天容地,与人何所不容!包容是人生的财富。包容别人是一种幸福,能让别人心存感激更是一种幸迷茫中也要前进生命中各个阶段都会有自己的迷茫期,幸运的是小孩子有大人帮他做引导,青年有前辈为他指路。但要度过迷茫,还是得靠自己。这种迷茫我觉得在20出头的年龄会体现得很明显,年轻人知道自己该奋斗潮汕西北部有个揭西县,当地两大方言彼此不相通,但却融合得很好提起广东潮汕地区,很多人认为当地人应该都是讲潮汕话的,实际上不少县区都有客家人,揭西县的客家人数量最多,总体占比略高于讲潮汕话的群体。揭西县位于潮汕地区的西北部,包括山地平原和丘陵对敏感肌很友好的爽肤水有哪些?超温和好用的爽肤水推荐对敏感肌很友好的爽肤水有哪些?超温和好用的爽肤水推荐!JurliqueRosewaterBalancingMist(茱莉蔻玫瑰平衡花卉水)前前后后也不知道有多少MM让邦利写个茱莉蔻建议50岁女人,别穿卫衣扮嫩!这3件上衣更适合你,优雅迷人卫衣在时尚圈是常青树的存在,经典百搭不过时,几乎年年流行。尤其是oversize款卫衣,宽松藏肉,特别受欢迎,从20岁到50岁,没人不爱穿。尽管卫衣时尚百搭,但建议50女人少穿卫衣过好自己的每一天不知道你最近有没有不开心。也许只是因为一件小事,你的情绪突然变得很低落,觉得莫名的委屈,不想说话,很多时候,感情破裂是没有原因的。当一个人面对这么多压力和困难的时候,内心的负面情绪增广贤文名言语录10句,莫信直中直,须防仁不仁1闹里有钱,静处安身。人多热闹的地方,自然赚钱的机会就多,但是幽静宁静的地方却是修身养性的好地方。这世间的事情本就难有两全,有得必有失,要想多赚些钱,多一些的机会,自己要去到人多繁
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网