精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

取代OpenFeign:Spring Framework 6全新聲明式客戶端@HttpExchange

開發(fā) 前端
Spring不到萬不得已之時(shí),一般不會(huì)自己重復(fù)造輪子。在Http客戶端這塊一樣借力打力,提供Http統(tǒng)一調(diào)用方式RestTemplate,屏蔽了細(xì)節(jié),規(guī)范了開發(fā)者的使用,簡(jiǎn)化了開發(fā)門檻。

前言

Http是最常見的請(qǐng)求協(xié)議,每種編程語言都可發(fā)送Http請(qǐng)求。Java作為經(jīng)典編程語言之一,發(fā)送Http請(qǐng)求的客戶端更是不少,自己的內(nèi)置的就有java.net.HttpURLConnection以及Java 11以后的java.net.http.HttpClient。在Java 11之前,HttpURLConnection很難用,因此市場(chǎng)上百花齊放出現(xiàn)了不少優(yōu)秀的開源作品,典型代表為:

  • Apache HttpClient(現(xiàn)最新為Http Component 5.x)
  • OkHttp(現(xiàn)最新為OkHttp 4.x)

作為老牌的Apache HttpClient憑借著各種優(yōu)秀特征,似乎已成為了事實(shí)的標(biāo)準(zhǔn);后起之秀OkHttp不帶歷史包袱的輕裝上路,有著低網(wǎng)絡(luò)延遲、更優(yōu)秀的連接池性能,亦是一股不可輕視的力量。

Spring不到萬不得已之時(shí),一般不會(huì)自己重復(fù)造輪子。在Http客戶端這塊一樣借力打力,提供Http統(tǒng)一調(diào)用方式RestTemplate,屏蔽了細(xì)節(jié),規(guī)范了開發(fā)者的使用,簡(jiǎn)化了開發(fā)門檻。

PS:RestTemplate的底層實(shí)現(xiàn)依舊是Apache HttpClient、OkHttp、HttpURLConnection之一

以上,都還是編程式Http客戶端。隨著Spring Boot的普及,Spring Cloud的出現(xiàn),聲明式編碼變得越來越主流,因?yàn)槁暶魇?面向元數(shù)據(jù)編碼效率遠(yuǎn)高于編程式編碼效率。因此,F(xiàn)eign出現(xiàn)了,迅速成為了主流。

今年,隨著劃時(shí)代版本Spring Framework 6、Spring Boot 3、Spring Cloud 2022.0.0的發(fā)布,Spring團(tuán)隊(duì)自建了一套聲明式Http客戶端:@HttpExchange,目標(biāo)直指OpenFeign。

正文

全新的聲明式Http客戶端由Spring Framework 6提供定義,Spring Boot 3提供實(shí)現(xiàn),Spring Cloud 2022負(fù)責(zé)發(fā)揚(yáng)光大。今天我們就來體驗(yàn)一把

介紹一個(gè)免費(fèi)的、在線的Rest Http服務(wù)

由于我們需要一個(gè)提供Http Server來提供接口服務(wù),為此先給你介紹一個(gè)免費(fèi)的、24h在線的Rest Http服務(wù),省去我們自己搭建的麻煩。

地址:jsonplaceholder.typicode.com圖片每月提供近20億的請(qǐng)求,關(guān)鍵還是免費(fèi)的、可公開訪問的,好用得不要不要。

圖片

發(fā)一個(gè)簡(jiǎn)單的Http請(qǐng)求,就能獲取到數(shù)據(jù)。URL遵循Rest規(guī)范:

圖片

不挑Http或者Https,比如使用瀏覽器訪問這個(gè)URL得到的結(jié)果也是一樣的:

圖片

它提供多個(gè)Resources資源(以及多種Routes)供以訪問,對(duì)這些資源進(jìn)行增刪改查的操作,你想要的絕大部分都能滿足你。當(dāng)然,若你需要mock data是符合自己的數(shù)據(jù)結(jié)構(gòu)、業(yè)務(wù)邏輯的,可基于此項(xiàng)目做簡(jiǎn)單的修改即可,良心項(xiàng)目啊。具體詳情自行去官方體驗(yàn):https://jsonplaceholder.typicode.com。

全新聲明式Http客戶端@HttpExchange

環(huán)境聲明:Spring Boot 3.0.x

本文選用”albums“資源進(jìn)行測(cè)試:https://jsonplaceholder.typicode.com/albums的請(qǐng)求結(jié)果結(jié)構(gòu)如下:

圖片

Feign代碼示例

略!Feign的使用,相信大家再熟悉不過了,筆者這里就不費(fèi)周章。

@HttpExchange代碼示例

?????♀?按照albums的返回?cái)?shù)據(jù)結(jié)構(gòu),寫Java Bean:

/**
* 在此處添加備注信息
*
* @author YourBatman
* @since 0.0.1
*/
@Builder
@Getter
public class AlbumsReq {
@NotNull
@Positive
private Long userId;
@NotBlank
private String title;
}
/**
* 在此處添加備注信息
*
* @author YourBatman
* @since 0.0.1
*/
@Setter
@ToString
public class AlbumsResp {

private Long id;
private Long userId;
private String title;

}

順帶科普一個(gè)編碼規(guī)范:請(qǐng)求體Req中g(shù)et方法是必須的,set方法可選;響應(yīng)體Resp中set方法是必須的,get方法可選;二者都需遵循Java Bean規(guī)范! 粗暴的做法是不管需求如何,get/set一把梭,可行,但作為程序員的你應(yīng)該知道原由,理解要義。

?????♀?導(dǎo)入webflux包 此聲明式客戶端又Spring Framework 6提供,但由于其并未提供實(shí)現(xiàn)。Spring Boot 3為此提供了基于Reactive的Web實(shí)現(xiàn),因此需要導(dǎo)入webflux包:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

?????♀?編寫Http客戶端申明式接口。

/**
* 在此處添加備注信息
*
* @author YourBatman
* @since 0.0.1
*/
@HttpExchange("/albums")
public interface AlbumsClient {

@GetExchange
List<AlbumsResp> getAll();

@GetExchange("/{id}")
AlbumsResp getById(@PathVariable Long id);

@PostExchange
AlbumsResp add(@RequestBody @Valid AlbumsReq req);

}

?????♀?書寫測(cè)試用例代碼。

@SpringBootTest
class ApplicationTests {

@Autowired
private AlbumsClient albumsClient;

@Test
void contextLoads(){
System.out.println("getAll size:" + albumsClient.getAll().size());

System.out.println("getById 1:" + albumsClient.getById(1L));

// 創(chuàng)建一個(gè)
Object addedResp = albumsClient.add(AlbumsReq.builder().userId(1L).title("diy add...").build());
System.out.println("創(chuàng)建的allAlbums對(duì)象為:" + addedResp + ",現(xiàn)在總數(shù)為:" + albumsClient.getAll().size());
}

}

?????♀?運(yùn)行測(cè)試代碼,控制臺(tái)輸出:

getAll size:100
getById 1:AlbumsResp(id=1, userId=1, title=quidem molestiae enim)
創(chuàng)建的allAlbums對(duì)象為:AlbumsResp(id=101, userId=1, title=diy add...),現(xiàn)在總數(shù)為:100

完美!

小細(xì)節(jié):創(chuàng)建的時(shí)候并未制定id,發(fā)現(xiàn)id是自增的(id=101)。但這并不會(huì)保存在typicode.com的遠(yuǎn)端服務(wù)器了,不會(huì)引起總條數(shù)的變化。

@HttpExchange聲明式客戶端簡(jiǎn)析

@HttpExchange是Spring Framework 6新提供的聲明式Http客戶端,客戶端的要素由注解的屬性 + 方法簽名來定義。先來看看這個(gè)注解:

/**
* Since: 6.0
*/
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
@Reflective(HttpExchangeReflectiveProcessor.class)
public @interface HttpExchange {
@AliasFor("url")
String value() default "";
@AliasFor("value")
String url() default "";
String method() default "";
String contentType() default "";
String[] accept() default {};
}

和@RequestMapping參照對(duì)比:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
@Reflective(ControllerMappingReflectiveProcessor.class)
public @interface RequestMapping {

String name() 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 {};

}

不說一毛一樣,也是基本一樣。@HttpExchange注解可以標(biāo)注在類上和方法上,最終的URL組合起來生效。大家都是使用過Feign、使用過Spring MVC的,這就不用過多介紹了。

和@RequestMapping一樣,@HttpExchange也有其派生注解:

  • @GetExchange:GET請(qǐng)求。類似于于@GetMapping
  • @PostExchange:Post請(qǐng)求。類似于于@PostMapping
  • @PutExchange:Put請(qǐng)求。類似于于@PutMapping
  • @DeleteExchange:Delete請(qǐng)求。類似于于@DeleteMapping
  • @PatchExchange:Patch請(qǐng)求。類似于于@PatchMapping

@HttpExchange聲明式客戶端前景展望

通過interface這種聲明式使用起來比RestTemplate,或者WebClient要簡(jiǎn)單很多,大大簡(jiǎn)化了開發(fā)步驟,對(duì)開發(fā)者更加友好。

最新發(fā)布的Spirng Cloud 2022.0.0里描述得很明白:停止對(duì)OpenFeign的特征支持。言外之意:OpenFeign即將被Spring Cloud“淘汰”,接棒的那必然是@HttpExchange嘍。所以在可預(yù)見的將來,前景一片大好。

圖片

但是,筆者認(rèn)為它還不夠成熟,主要有兩點(diǎn):

  1. 還不能支持Spring-Web的注解(@RequestMapping體系),若能支持個(gè)人覺得會(huì)更為方便。
  2. 目前還只有WebClient一套實(shí)現(xiàn)(由Spring Boot提供實(shí)現(xiàn)),而它屬于Reactive Web體系,也就是必須引入webFlux相關(guān)技術(shù),而webFlux在做業(yè)務(wù)開發(fā)時(shí)優(yōu)勢(shì)不明顯,并非主流。
  1. 因?yàn)槿鬢ebClient能從Reactive Web里剝離出來,筆者覺得就好很多了。

總結(jié)

誰能想到,OpenFeign竟然都快被淘汰了,Spring的大船滾滾向前,引領(lǐng)著整個(gè)潮流,逐漸暴露出了野心,或者說感受到了危機(jī)。

先抄襲,再超越,Spring做到了。隱藏在全新的聲明式客戶端背后,其實(shí)還有Spring Framework 6背后對(duì)Web Mapping體系的重構(gòu),細(xì)心的你或許已有所發(fā)現(xiàn)。這些話題、新發(fā)現(xiàn),留予筆者和你后續(xù)接著聊。

責(zé)任編輯:姜華 來源: YourBatman
相關(guān)推薦

2024-10-11 11:32:22

Spring6RSocket服務(wù)

2013-05-30 17:52:06

2010-07-19 17:35:09

Telnet客戶端IPv6

2011-08-17 10:10:59

2010-01-06 19:09:13

.NET Framew

2021-09-22 15:46:29

虛擬桌面瘦客戶端胖客戶端

2009-06-22 09:01:57

Spring聲明式事務(wù)

2010-05-31 10:11:32

瘦客戶端

2011-10-26 13:17:05

2011-03-24 13:00:31

配置nagios客戶端

2011-03-02 14:36:24

Filezilla客戶端

2010-12-21 11:03:15

獲取客戶端證書

2021-07-26 05:03:44

OpenFeign系統(tǒng)組件

2024-12-30 00:24:46

2013-10-21 09:48:35

2011-03-21 14:53:36

Nagios監(jiān)控Linux

2013-05-09 09:33:59

2011-04-06 14:24:20

Nagios監(jiān)控Linux

2009-03-04 10:27:50

客戶端組件桌面虛擬化Xendesktop

2024-12-02 09:19:44

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

免费黄色网址在线观看| 草久久免费视频| 欧美高清一级片| 亚洲成av人综合在线观看| 久久久久久久久一区二区| 日韩xxx视频| 欧美一区久久| 亚洲精品一区二区久| 欧美精品久久久久久久久25p| 免费网站成人| 91在线观看免费视频| 国产一区香蕉久久| 黑人一级大毛片| 精品不卡一区| 亚洲第一偷拍网| 超碰在线人人爱| jizz一区二区三区| 国产精品亲子伦对白| 国产欧美日韩一区| 97精品久久人人爽人人爽| 999在线观看精品免费不卡网站| 在线日韩精品视频| 国产伦精品一区三区精东| 成人在线视频观看| 亚洲综合色噜噜狠狠| 五月婷婷一区| 亚洲av片在线观看| 国产成人午夜99999| 国产精品视频久久久久| 日韩 欧美 综合| 中文字幕乱码亚洲无线精品一区| 亚洲欧美在线x视频| 4438x全国最大成人| 欧美网站免费| 日本丰满少妇一区二区三区| 国产九色porny| 黄色动漫在线| 国产精品日韩成人| 青青草久久网络| 人人九九精品| 99亚偷拍自图区亚洲| 91精品综合久久| 国产99对白在线播放| 麻豆国产一区二区| 国产精品稀缺呦系列在线| 中文字幕免费在线观看视频| 日韩一级不卡| 91高清在线免费观看| 国产一级中文字幕| 合欧美一区二区三区| 欧美理论片在线观看| 国产老头老太做爰视频| 99久久.com| xvideos国产精品| 麻豆一区在线观看| 久久精品av| 日韩一区二区三区国产| 久久精品色妇熟妇丰满人妻| 大片网站久久| 日韩中文字在线| 91ts人妖另类精品系列| 久久性感美女视频| 五十路在线视频| 92国产精品观看| 欧美日韩精品免费观看| 激情在线视频| 中文字幕av一区二区三区免费看 | 午夜久久久精品| 精品成人免费一区二区在线播放| 91久久香蕉国产日韩欧美9色| 久久久久久久久久福利| 精品国模一区二区三区| 欧美日韩国产综合一区二区| 中文字幕第100页| 综合久久伊人| 精品日本一线二线三线不卡| 国产女人18毛片水真多18| 色狠狠久久av综合| 一区二区三区高清国产| 欧美xxxooo| 欧美黄色一级视频| 秋霞成人午夜鲁丝一区二区三区| 国产性生活视频| 久久99国产精品久久99果冻传媒| 95av在线视频| 人妻无码一区二区三区久久99 | 精品国产aⅴ麻豆| 久草视频在线看| 综合网在线视频| 国产人妻777人伦精品hd| 成人爽a毛片免费啪啪| 欧美撒尿777hd撒尿| 日本一区二区三区在线免费观看| 国产91精品入| 亚洲香蕉成人av网站在线观看| 免费黄色在线网址| 欧美性久久久| 国产精国产精品| www.我爱av| 国产嫩草影院久久久久| 日韩欧美一级在线| 桃花岛tv亚洲品质| 日韩欧美黄色影院| 538精品视频| 亚洲性感美女99在线| 国产精品久久精品| 亚洲国产999| 中文字幕国产精品一区二区| 波多野结衣av一区二区全免费观看| 一区二区三区电影大全| 欧美一区二区免费视频| av男人的天堂av| 亚洲经典自拍| 亚洲一区亚洲二区| av资源在线观看免费高清| 亚洲国产欧美一区二区三区丁香婷| 97公开免费视频| 国内露脸中年夫妇交换精品| 色哟哟亚洲精品一区二区| 日韩精品久久久久久久| 国产一区二区三区四区五区美女| 久久国产精品-国产精品| 福利在线视频网站| 欧美三级一区二区| 中文字幕一区二区三区人妻不卡| 欧美精品国产一区| 国产日韩欧美日韩| 国产剧情在线观看| 色综合一个色综合亚洲| 91人人澡人人爽| 婷婷激情图片久久| 国产精品视频地址| 成人不用播放器| 色悠悠亚洲一区二区| 欧产日产国产精品98| 欧美一区二区三区另类 | 日本在线观看a| 亚洲精品一区二区三区在线| 精品国产欧美一区二区五十路 | 老牛国产精品一区的观看方式| 亚洲sss综合天堂久久| 777电影在线观看| 欧美色偷偷大香| 在线视频第一页| 日韩主播视频在线| 日韩成人在线资源| 中文字幕系列一区| 中文字幕精品一区二区精品| www.av88| 国产精品网站在线| 成年网站在线播放| 色狮一区二区三区四区视频| 国产精品福利在线| av免费观看一区二区| 在线免费观看日本一区| 亚洲国产天堂av| 蜜桃视频免费观看一区| 亚洲国产精品一区在线观看不卡| 日韩av中字| 伊人一区二区三区久久精品| 伊人久久一区二区| 中文字幕一区二区三区蜜月| 午夜一区二区视频| 亚洲女同一区| 91成人理论电影| av中文字幕在线看| 国产午夜精品麻豆| 特级西西444www高清大视频| 国产精品久久久久毛片软件| 51自拍视频在线观看| 欧美精品国产| 久久综合福利| 成人激情视屏| 欧美乱大交xxxxx另类电影| 亚洲av永久无码国产精品久久| 亚洲午夜激情av| 国产偷人妻精品一区| 日韩va亚洲va欧美va久久| 久久免费看毛片| 中文字幕一区二区三区四区久久 | 中文字幕精品久久久久| 国产精品久久久久久久免费看| 亚洲美女偷拍久久| 国产又黄又粗又猛又爽的视频| 久久久夜精品| 99久久久无码国产精品性色戒| 福利欧美精品在线| 国产精品av电影| av片哪里在线观看| 精品视频一区在线视频| 一级特黄aaa| 亚洲大片免费看| 日本成人午夜影院| 国产.精品.日韩.另类.中文.在线.播放 | 欧美一区二区视频| 在线不卡中文字幕| 国产成人无码一区二区三区在线| 国产欧美一区二区三区在线看蜜臀 | 亚洲一区站长工具| 久久综合伊人77777蜜臀| 亚洲欧洲视频在线观看| 3d成人动漫网站| 欧美国产成人精品一区二区三区| 中文字幕一区二区三区av| 国产精品久久AV无码| 久久成人麻豆午夜电影| 妺妺窝人体色www在线小说| 97精品一区| 日本黄网免费一区二区精品| 麻豆国产一区| 国产精品香蕉av| 成人美女黄网站| 欧美激情第6页| 黄网站免费在线播放| 亚洲精品日韩欧美| 色婷婷av一区二区三| 欧美精品国产精品| 久久精品五月天| 亚洲成人免费观看| a级片在线观看免费| 中文字幕不卡在线| 无码国产69精品久久久久同性| 国产suv精品一区二区三区| 黄大色黄女片18第一次| 久热re这里精品视频在线6| 青春草国产视频| 在线一区免费| 亚洲一区二区免费视频软件合集| 网红女主播少妇精品视频| 国产精品二区三区| 日本精品在线播放| 成人亚洲激情网| 九九热这里有精品| 国产精品日韩欧美大师| 新片速递亚洲合集欧美合集| 91精品国产乱码久久久久久久久| 中文在线观看免费| 欧美日韩xxx| av片在线观看| 久久国产精品首页| 中文在线手机av| 欧美日本高清一区| 超碰97国产精品人人cao| 久久av中文字幕| 成人日日夜夜| 精品自拍视频在线观看| caoporn免费在线视频| 免费91在线视频| 超碰在线免费公开| 欧美日本在线视频中文字字幕| 国产盗摄在线观看| 久久国产精品偷| 亚洲国产精品精华素| 欧美—级高清免费播放| 超免费在线视频| 欧美壮男野外gaytube| 三上悠亚激情av一区二区三区| 日韩av大片免费看| 91亚洲视频| 国产色视频一区| 国产精品18| 99久久自偷自偷国产精品不卡| 亚洲三级av| 久久精品国产一区二区三区日韩| 久久中文字幕导航| 欧美日韩国产综合视频在线| 欧洲杯半决赛直播| 色香蕉在线观看| 国产精品hd| 日本精品免费在线观看| 三级影片在线观看欧美日韩一区二区 | 在线免费观看视频| 国产精品精品国产色婷婷| 精品国产国产综合精品| 亚洲一本大道在线| 人妻 日韩精品 中文字幕| 欧美吞精做爰啪啪高潮| 国产99久一区二区三区a片| 亚洲成年人影院在线| 精品999视频| 久久躁日日躁aaaaxxxx| jizzjizz中国精品麻豆| 国产激情视频一区| 日韩视频1区| 美女亚洲精品| 国产大片一区| 国产91在线免费| 久久国产精品72免费观看| 欧美激情一区二区三区p站| ww亚洲ww在线观看国产| 大地资源高清在线视频观看| 亚洲国产美女搞黄色| 69视频免费看| 精品卡一卡二卡三卡四在线| 欧洲免费在线视频| 色综合久久久888| 韩国美女久久| 成人xxxxx色| 91嫩草亚洲精品| 久久99中文字幕| 久久成人免费电影| 亚洲午夜福利在线观看| 亚洲乱码一区二区三区在线观看| 日韩免费在线视频观看| 麻豆av电影在线观看| 欧美高清自拍一区| 亚洲伦理久久| 欧美系列一区| 亚洲小说欧美另类社区| www.污网站| 欧美国产一区视频在线观看| 久久精品这里有| 91精品国产综合久久精品| 黄色在线免费观看大全| 国内精品久久久久影院优| 在线观看亚洲精品福利片| 任我爽在线视频精品一| 韩日精品视频| 999热精品视频| 国产欧美精品一区二区色综合朱莉 | 天堂网在线中文| 欧美成人免费小视频| 欧美在线一级| 日韩精品电影网站| 亚洲无线视频| 在线观看欧美一区二区| 国产精品成人网| 亚洲天堂久久久久| 亚洲性生活视频在线观看| 蜜桃视频www网站在线观看| 超碰97在线人人| 午夜精品网站| 欧美日韩一区二区区别是什么| 亚洲男帅同性gay1069| 一级淫片免费看| 日韩最新中文字幕电影免费看| 三级成人黄色影院| 日本一区免费在线观看| 麻豆91精品| 熟女俱乐部一区二区| 欧美视频中文字幕在线| 日av在线播放| 日韩av电影手机在线观看| 亚欧洲精品视频在线观看| 中文字幕无码精品亚洲资源网久久| 国产成人自拍在线| 免费无码毛片一区二区app| 日韩久久久久久| 国产经典三级在线| 久久精品成人一区二区三区蜜臀| 一区二区激情| 国产三级视频网站| 色哟哟一区二区| 成人资源www网在线最新版| 国产精品久久久久久久一区探花 | 九九热最新视频| 中文字幕av日韩| 高清一区二区三区av| 性做爰过程免费播放| 国产成人午夜电影网| 激情五月色婷婷| 亚洲免费av片| 精品日本视频| dy888午夜| 北岛玲一区二区三区四区| 欧美成人精品欧美一级乱黄| 亚洲精品在线不卡| 国精品产品一区| 水蜜桃在线免费观看| 成人国产视频在线观看| 精品人妻无码一区二区性色| 亚洲色图激情小说| 91成人小视频| 久久久久久人妻一区二区三区| 99久久99久久久精品齐齐| 不卡av电影在线| 久久精品视频播放| 加勒比视频一区| www日韩在线观看| 亚洲精品视频在线观看免费 | 中文字幕久久亚洲| 日韩欧美中文字幕在线视频| 国产男女无遮挡| 亚洲男人都懂的| 天堂av电影在线观看| 国产精品视频免费观看www| 国产精品多人| youjizz亚洲女人| 精品99999| 日韩五码电影| 成熟丰满熟妇高潮xxxxx视频| 中文字幕乱码亚洲精品一区| www.久久久久久| 国产精品黄页免费高清在线观看| 91精品天堂福利在线观看| 特级西西人体4444xxxx| 在线电影一区二区三区| 亚洲同志男男gay1069网站| www.99riav| 欧美国产日本视频|