范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

OpenFeign要被HttpExchange替代了吗?

  前言
  Http是最常见的请求协议,每种编程语言都可发送Http请求。Java作为经典编程语言之一,发送Http请求的客户端更是不少,自己的内置的就有java.net.HttpURLConnection以及Java 11以后的java.net.http.HttpClient。在Java 11之前,HttpURLConnection很难用,因此市场上百花齐放出现了不少优秀的开源作品,典型代表为:Apache HttpClient(现最新为Http Component 5.x)OkHttp(现最新为OkHttp 4.x)
  作为老牌的Apache HttpClient凭借着各种优秀特征,似乎已成为了事实的标准;后起之秀OkHttp不带历史包袱的轻装上路,有着低网络延迟、更优秀的连接池性能,亦是一股不可轻视的力量。
  Spring不到万不得已之时,一般不会自己重复造轮子。在Http客户端这块一样借力打力,提供Http统一调用方式RestTemplate,屏蔽了细节,规范了开发者的使用,简化了开发门槛。
  PS:RestTemplate的底层实现依旧是Apache HttpClient、OkHttp、HttpURLConnection之一
  以上,都还是编程式Http客户端。随着Spring Boot的普及,Spring Cloud的出现,声明式编码变得越来越主流,因为声明式/面向元数据编码效率远高于编程式编码效率。因此,Feign出现了,迅速成为了主流。
  今年,随着划时代版本Spring Framework 6、Spring Boot 3、Spring Cloud 2022.0.0的发布,Spring团队自建了一套声明式Http客户端:@HttpExchange,目标直指OpenFeign。正文
  全新的声明式Http客户端由Spring Framework 6提供定义,Spring Boot 3提供实现,Spring Cloud 2022负责发扬光大。今天我们就来体验一把介绍一个免费的、在线的Rest Http服务
  由于我们需要一个提供Http Server来提供接口服务,为此先给你介绍一个免费的、24h在线的Rest Http服务,省去我们自己搭建的麻烦。
  地址:jsonplaceholder.typicode.com
  每月提供近20亿的请求,关键还是免费的、可公开访问的,好用得不要不要。
  发一个简单的Http请求,就能获取到数据。URL遵循Rest规范:
  不挑Http或者Https,比如使用浏览器访问这个URL得到的结果也是一样的:
  它提供多个Resources资源(以及多种Routes)供以访问,对这些资源进行增删改查的操作,你想要的绝大部分都能满足你。当然,若你需要mock data是符合自己的数据结构、业务逻辑的,可基于此项目做简单的修改即可,良心项目啊。具体详情自行去官方体验:https://jsonplaceholder.typicode.com。全新声明式Http客户端@HttpExchange
  环境声明:Spring Boot 3.0.x
  本文选用"albums"资源进行测试:https://jsonplaceholder.typicode.com/albums的请求结果结构如下:
  Feign代码示例
  略!Feign的使用,相信大家再熟悉不过了,笔者这里就不费周章。@HttpExchange代码示例
  按照albums的返回数据结构,写Java Bean:
  复制/*** 在此处添加备注信息** @author YourBatman* @since 0.0.1*/@Builder@GetterpublicclassAlbumsReq {     @NotNull@PositiveprivateLonguserId;     @NotBlankprivateStringtitle; } /*** 在此处添加备注信息** @author YourBatman* @since 0.0.1*/@Setter@ToStringpublicclassAlbumsResp {      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方法可选;二者都需遵循Java Bean规范! 粗暴的做法是不管需求如何,get/set一把梭,可行,但作为程序员的你应该知道原由,理解要义。
  导入webflux包 此声明式客户端又Spring Framework 6提供,但由于其并未提供实现。Spring Boot 3为此提供了基于Reactive的Web实现,因此需要导入webflux包:
  复制org.springframework.bootspring-boot-starter-webflux1.2.3.4.
  编写Http客户端申明式接口。
  复制/*** 在此处添加备注信息** @author YourBatman* @since 0.0.1*/@HttpExchange("/albums") publicinterfaceAlbumsClient {      @GetExchangeListgetAll();      @GetExchange("/{id}")     AlbumsRespgetById(@PathVariableLongid);      @PostExchangeAlbumsRespadd(@RequestBody@ValidAlbumsReqreq);  }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("getAll size:"+albumsClient.getAll().size());          System.out.println("getById 1:"+albumsClient.getById(1L));          // 创建一个ObjectaddedResp=albumsClient.add(AlbumsReq.builder().userId(1L).title("diy add...").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(id=1, userId=1, title=quidemmolestiaeenim) 创建的allAlbums对象为:AlbumsResp(id=101, userId=1, title=diyadd...),现在总数为:1001.2.3.
  完美!
  小细节:创建的时候并未制定id,发现id是自增的(id=101)。但这并不会保存在typicode.com的远端服务器了,不会引起总条数的变化。@HttpExchange声明式客户端简析
  @HttpExchange是Spring Framework 6新提供的声明式Http客户端,客户端的要素由注解的属性 + 方法签名来定义。先来看看这个注解:
  复制/*** Since: 6.0*/@Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented@Mapping@Reflective(HttpExchangeReflectiveProcessor.class) public@interfaceHttpExchange {  @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) @Documented@Mapping@Reflective(ControllerMappingReflectiveProcessor.class) public@interfaceRequestMapping {   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、使用过Spring MVC的,这就不用过多介绍了。
  和@RequestMapping一样,@HttpExchange也有其派生注解:@GetExchange:GET请求。类似于于@GetMapping@PostExchange:Post请求。类似于于@PostMapping@PutExchange:Put请求。类似于于@PutMapping@DeleteExchange:Delete请求。类似于于@DeleteMapping@PatchExchange:Patch请求。类似于于@PatchMapping@HttpExchange声明式客户端前景展望
  通过interface这种声明式使用起来比RestTemplate,或者WebClient要简单很多,大大简化了开发步骤,对开发者更加友好。
  最新发布的Spirng Cloud 2022.0.0里描述得很明白:停止对OpenFeign的特征支持。言外之意:OpenFeign即将被Spring Cloud"淘汰",接棒的那必然是@HttpExchange喽。所以在可预见的将来,前景一片大好。
  但是,笔者认为它还不够成熟,主要有两点:还不能支持Spring-Web的注解(@RequestMapping体系),若能支持个人觉得会更为方便。目前还只有WebClient一套实现(由Spring Boot提供实现),而它属于Reactive Web体系,也就是必须引入webFlux相关技术,而webFlux在做业务开发时优势不明显,并非主流。因为若WebClient能从Reactive Web里剥离出来,笔者觉得就好很多了。总结
  谁能想到,OpenFeign竟然都快被淘汰了,Spring的大船滚滚向前,引领着整个潮流,逐渐暴露出了野心,或者说感受到了危机。
  先抄袭,再超越,Spring做到了。隐藏在全新的声明式客户端背后,其实还有Spring Framework 6背后对Web Mapping体系的重构,细心的你或许已有所发现。这些话题、新发现,留予笔者和你后续接着聊。
  原文链接:https://www.51cto.com/article/743079.html

乘风破浪30位姐姐公布,路透持续引热议,张天爱美得太出众最近,乘风破浪的姐姐3公布了全阵容,一共三十位艺人参加,可谓是星光熠熠啊。作为话题度很高的一档选秀节目,浪姐3自从拍摄开始就有各种路透流出,引起网友热烈讨论。张天爱的颜值就是其中一陈国军我唯一全身心爱过的女人是刘晓庆,儿子陈赫是最大的骄傲陈国军愧对赵雅珉,最恨刘晓庆,余生不会辜负小16岁的傅丽云问世间情为何物,只叫人生死相许。情不知所起,一往而深这一幕幕,似乎只有在大荧幕中,才能感同身受。殊不知,却在现实生活中,拉文艺兵军衔有多高?李幼斌是真将军,韩红是大校,洪剑涛是师级在演艺圈中有这么一群人,他们表面是艺人,实际上是大学教师。比较为人熟知的就是何炅和黄磊,曾经饰演过万人迷的陈好目前也已经是中戏的老师。演艺圈中有着双重身份的人也不少,除了有的是老师从一线国综到评分不及格,他花了7年,却把王牌打到烂?Sir又准备对一档国综说再见了。的确辉煌过。内娱最难组的局,它能组国内最难请的明星,它能拿下磕磕绊绊连办七年,逐渐跻身热度一线的国民综艺。如今?刚开播,全网倒戈大骂吃相难看刚开分,浪姐3阵容曝光后,10位姐姐遭遇尴尬,揭开娱乐圈三大现实面观众们期待已久的浪姐3终于开播在即,有平台放出了30位姐姐的完整名单。经过了两季浪姐热潮之后,大家的热情虽然依旧在,但是对节目对姐姐们的要求却越来越高。所以这次嘉宾名单一经曝出,就国产神婆和金星互撕,反拿话筒假唱曝光,淡定回复惹怒网友娱乐圈里故事多,今天我们来聊一下一位著名的歌手,她的成名作真的是大江南北无人不知,但是好好的事业却因为自己作的淡出了娱乐圈,她就是万物生的演唱者萨顶顶。说起萨顶顶,我大家脑海中最先王文澜倪萍儿子的生父,儿子患病后与倪萍离婚,离婚后终身未娶王文澜,是倪萍的前夫,也是倪萍儿子的生父。当初,为了追求倪萍,他斥巨资在北京盖了一所四合院。然而,在亲儿子患病之后,人们却说,他选择了抛妻弃子,远走高飞。王文澜,是一位摄影师,他的奚梦瑶晒近状脸蛋圆润,被曝正在准备三胎,网友直呼眼里没光了奚梦瑶和何猷君他们两个人的感情,一直以来都很受网友们的关注,刚开始大家对他们两个人的感情并不看好,认为这种嫁入豪门的感情,就是各取所需。不过他们两个也并没有在乎这些流言蜚语,依旧过女明星童年照,赵丽颖小时候照片认不出,鞠婧祎是吃可爱长大的对于明星不管是新作品或者是日常参加活动,都是可以通过一些视频或者图片来了解的。但是说到明星童年照来说,在平时也是很少公开的,说到童年照和长大之后的样子来说,通过仔细的观察还是能够认魅力男士穿搭依宝诺黑鲨系列8836腕表听,来自大海的呼唤喜欢大海的男人性格豪放心胸宽广热爱自由喜欢挑战在面对风险和未知时总能激起他心中的征服欲和探索欲依宝诺依宝诺黑鲨系列8836正是为这样的男士打造而成从经典航海表中获得灵感延续依宝诺传张玉宁说得对,球迷确实无知,有图有真相国脚张玉宁随意嘲讽很无知张玉宁说得对,中国球迷确实是无知,你再看看下面的图片,就知道中国球迷不仅是无知,而且还傻,有些痴呆。约摸二三十年前,中国男足在亚洲范围内也从来没有怕过谁。就
澳优2022年业绩公告实现营收约人民币77。96亿元坚定信心再出发红网时刻新闻3月31日讯(记者张馨心)3月30日,澳优乳业股份有限公司(股份代号1717。HK,以下简称澳优或公司)正式发布2022年全年业绩数据。公告期内,澳优实现营收约人民币7广州3月二手住宅网签12260宗,环比增长超两成新京报讯(记者袁秀丽)3月广州二手住宅交易氛围活跃,单月网签宗数创下2021年5月以来的新高。3月29日,广州市房地产中介协会发布的数据显示,3月(统计周期为2月26日至3月25日保安全保交楼保刚兑,2022年碧桂园表现继续稳健房地产行业此番经历寒冬时间之长,超出所有人的想象。过去一年,销售低迷疫情反复信心不足房企大面积暴雷。不过,在这场近20年来未有的行业大考中,示范生碧桂园凭借强力而稳健的财务管控和奋快看对委外催收合作机构管理不审慎,马上消费金融被罚款100万元实习记者章宇璠3月31日,中国银保监会重庆监管局发布了1张罚单,剑指马上消费金融股份有限公司和其相关责任人。罚单显示,马上消费金融股份有限公司主要违法违规事实(案由)为贷前审查不审第三期两品一械企业冒烟指数TOP10发布来源中国医药报近日,中国健康传媒集团舆情监测中心发布两品一械企业冒烟指数(2023年第三期),公开风险指数排名前十(共30家)的企业名单。两品一械企业冒烟指数数据来自中国药品医疗器甘肃省推动四条特色食品产业链集聚发展中国甘肃网3月31日讯(新甘肃甘肃日报记者范海瑞)记者从省工信厅了解到,我省将按照工信部国家发展改革委等11部门近日联合印发的关于培育传统优势食品产区和地方特色食品产业的指导意见,海通证券去年营收降40净利降49投资收益降77来源中国经济网中国经济网北京3月31日讯海通证券(600837。SH)昨晚披露的2022年年报显示,2022年,公司实现营业收入259。48亿元,同比下降39。94归属于母公司股东贸易投资顺差去哪了相关测算显示,2020年至2022年,我国贸易投资顺差合计近2万亿美元,但外汇储备外汇存款等数据并未同步增长。对此,业内人士认为,厘清贸易投资顺差的去向,需要从我国整体对外资金的来深圳证监局披露2022年度稽查执法情况重点打击恶性财务造假,严查内幕交易行为来源读特3月31日,深圳证监局披露2022年稽查执法情况全年共办理案件38件,其中自立案件26件办结案件20件,办结案件均查实。案件主体涉及辖区上市公司证券公司从业人员公募基金公司组图丨在东营的春景中感受光与暖大众网海报新闻记者苏志浩见习记者付昱涵东营报道凛冬已过,万物复苏。春天已经乘着清风,越过花海,向我们款款走来。美谈春日,盛开的花朵永远是最好的符号。在这温暖的季节里,东营充满了春日优美短篇分享,遗留下的美文小篇1素有屠龙报国志,浑入泥潭不自知,纵是降龙伏虎术,难逾千尺渡红尘。小篇2银河九天撒甘露,声震四野气如虹偶有清寒入棉衣,春朝一日复临冬。小篇3潺潺细雨声,独坐意朦胧,佳人繁忙处,