Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SpringBoot 3.0 新特性,内置声明式HTTP客户端

SpringBoot 3.0 新特性,内置声明式HTTP客户端

原创
作者头像
用户1219866
发布于 2022-12-01 03:27:51
发布于 2022-12-01 03:27:51
1.5K0
举报
文章被收录于专栏:lenglenglengleng

http interface

从 Spring 6 和 Spring Boot 3 开始,Spring 框架支持将远程 HTTP 服务代理成带有特定注解的 Java http interface。类似的库,如 OpenFeign 和 Retrofit 仍然可以使用,但 http interface 为 Spring 框架添加内置支持。

什么是声明式客户端

声明式 http 客户端主旨是使得编写 java http 客户端更容易。为了贯彻这个理念,采用了通过处理注解来自动生成请求的方式(官方称呼为声明式、模板化)。通过声明式 http 客户端实现我们就可以在 java 中像调用一个本地方法一样完成一次 http 请求,大大减少了编码成本,同时提高了代码可读性。

  • 举个例子,如果想调用 /tenants 的接口,只需要定义如下的接口类即可
代码语言:java
AI代码解释
复制
public interface TenantClient {

  @GetExchange("/tenants")
  Flux<User> getAll();
}

Spring 会在运行时提供接口的调用的具体实现,如上请求我们可以如 Java 方法一样调用

代码语言:java
AI代码解释
复制
@Autowired
TenantClient tenantClient;

tenantClient.getAll().subscribe(

);

测试使用

1. maven 依赖

代码语言:html
AI代码解释
复制
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- For webclient support -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

如下图: 目前官方只提供了非阻塞 webclient 的 http interface 实现,所以依赖中我们需要添加 webflux

2. 创建 Http interface 类型

  • 需要再接口类上添加 @HttpExchange 声明此类事 http interface 端点
代码语言:java
AI代码解释
复制
@HttpExchange
public interface DemoApi {

    @GetExchange("/admin/tenant/list")
    String list();
  • 方法上支持如下注解
代码语言:txt
AI代码解释
复制
@GetExchange:  for HTTP GET requests.
@PostExchange:  for HTTP POST requests.
@PutExchange: for HTTP PUT requests.
@DeleteExchange: for HTTP DELETE requests.
@PatchExchange:  for HTTP PATCH requests.
  • 方法参数支持的注解
代码语言:txt
AI代码解释
复制
@PathVariable: 占位符参数.
@RequestBody: 请求body.
@RequestParam: 请求参数.
@RequestHeader: 请求头.
@RequestPart: 表单请求.
@CookieValue: 请求cookie.

2. 注入声明式客户端

  • 通过给 HttpServiceProxyFactory 注入携带目标接口 baseUrl 的的 webclient,实现 webclient 和 http interface 的关联
代码语言:java
AI代码解释
复制
    @Bean
    DemoApi demoApi() {
        WebClient client = WebClient.builder().baseUrl("http://pigx.pigx.vip/").build();
        HttpServiceProxyFactory factory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(client)).build();
        return factory.createClient(DemoApi.class);
    }

3. 单元测试调用 http interface

代码语言:java
AI代码解释
复制
@SpringBootTest
class DemoApplicationTests {
	@Autowired
	private DemoApi demoApi;

	@Test
	void testDemoApi() {
		demoApi.list();
	}
}

基于Spring Boot 2.7、 Spring Cloud 2021 & Alibaba、 SAS OAuth2 一个可支持企业各业务系统或产品快速开发实现的开源微服务应用开发平台

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
还在用HttpUtil?SpringBoot 3.0全新HTTP客户端工具来了,用起来够优雅!
Http Interface让你可以像定义Java接口那样定义HTTP服务,而且用法和你平时写Controller中方法完全一致。它会为这些HTTP服务接口自动生成代理实现类,底层是基于Webflux的WebClient实现的。
macrozheng
2022/12/14
3.6K0
还在用HttpUtil?SpringBoot 3.0全新HTTP客户端工具来了,用起来够优雅!
SpringBoot3 响应式网络请求客户端
SpringBoot是一个基于Spring的快速开发框架,它可以帮助我们快速构建、部署和运行Java应用程序。HTTP接口是Web应用程序与外部系统进行通信的一种方式,通过HTTP协议,我们可以实现客户端与服务器之间的数据交互。
鱼找水需要时间
2023/07/29
1.3K0
SpringBoot3 响应式网络请求客户端
还在用HttpUtil?SpringBoot 3全新HTTP客户端工具来了,用起来够优雅!
Http Interface让你可以像定义Java接口那样定义HTTP服务,而且用法和你平时写Controller中方法完全一致。它会为这些HTTP服务接口自动生成代理实现类,底层是基于Webflux的WebClient实现的。
macrozheng
2024/01/23
2.7K0
还在用HttpUtil?SpringBoot 3全新HTTP客户端工具来了,用起来够优雅!
取代OpenFeign:Spring Framework 6全新声明式客户端@HttpExchange
Http是最常见的请求协议,每种编程语言都可发送Http请求。Java作为经典编程语言之一,发送Http请求的客户端更是不少,自己的内置的就有java.net.HttpURLConnection以及Java 11以后的java.net.http.HttpClient。在Java 11之前,HttpURLConnection很难用,因此市场上百花齐放出现了不少优秀的开源作品,典型代表为:
YourBatman
2022/12/29
2.6K0
取代OpenFeign:Spring Framework 6全新声明式客户端@HttpExchange
再见 Feign ,Spring 6 新特性:HTTP Interface
来源:https://juejin.cn/post/7173271507047546893 Spring 6 的新特性:HTTP Interface 近期,Spring 6 的第一个 GA 版本发布了,其中带来了一个新的特性——HTTP Interface。这个新特性,可以让开发者将 HTTP 服务,定义成一个包含特定注解标记的方法的 Java 接口,然后通过对接口方法的调用,完成 HTTP 请求。看起来很像使用 Feign 来完成远程服务调用,下面我们参考官方文档来完成一个 Demo。 完成一个 De
程序猿DD
2023/02/24
1.1K0
再见 Feign ,Spring 6 新特性:HTTP Interface
Spring 新特性,正式“抛弃”Feign了
近期,Spring 6 的第一个 GA 版本发布了,其中带来了一个新的特性——HTTP Interface。这个新特性,可以让开发者将 HTTP 服务,定义成一个包含特定注解标记的方法的 Java 接口,然后通过对接口方法的调用,完成 HTTP 请求。看起来很像使用 Feign 来完成远程服务调用,下面我们参考官方文档来完成一个 Demo。
一行Java
2023/02/23
9300
Spring 新特性,正式“抛弃”Feign了
正式抛弃 Feign!Spring 6 推出新特性:HTTP Interface,这波太秀了!
近期,Spring 6 的第一个 GA 版本发布了,其中带来了一个新的特性——HTTP Interface。这个新特性,可以让开发者将 HTTP 服务,定义成一个包含特定注解标记的方法的 Java 接口,然后通过对接口方法的调用,完成 HTTP 请求。看起来很像使用 Feign 来完成远程服务调用,下面我们参考官方文档来完成一个 Demo。
Java技术栈
2023/02/27
7890
正式抛弃 Feign!Spring 6 推出新特性:HTTP Interface,这波太秀了!
什么是声明式HTTP客户端
声明式HTTP客户端是一种基于注解和接口定义的HTTP客户端,使得开发人员可以通过编写接口的方式来调用远程HTTP服务,而无需编写具体的HTTP请求代码。这种方式使得开发人员可以更加专注于业务逻辑的实现,而不必关注HTTP请求的细节。
堕落飞鸟
2023/04/07
7650
HTTP客户端工具该选哪个?进来看
HTTP(超文本传输协议)是一种应用层协议,用于客户端和服务端进行通信,按照标准格式如JSON、XML等进行网络数据的传输,通常也作为应用程序之间以RESTAPI形式进行通信的常用协议。
玖柒的小窝
2021/11/28
5.5K0
HTTP客户端工具该选哪个?进来看
(5)Spring WebFlux快速上手——响应式Spring的道法术器「建议收藏」
如上图所示,左侧为基于spring-webmvc的技术栈,右侧为基于spring-webflux的技术栈,
全栈程序员站长
2022/07/25
4.9K0
(5)Spring WebFlux快速上手——响应式Spring的道法术器「建议收藏」
Spring 7.0更新特性大全,一次全学会
比如Tomcat,最低要求Tomcat 11(现在一般都是Spring Boot,几乎不需要自己关注Tomcat)。
大风写全栈
2025/04/25
4520
Spring 7.0更新特性大全,一次全学会
Spring5---新特性(WebFlux)
传统的web框架,比如springmvc,这些是基于servlet容器,webflux是一种异步非阻塞的框架,异步非阻塞的框架是在servlet 3.1 以后才支持的,核心是基于Reactor的相关API实现的
大忽悠爱学习
2021/11/15
1.9K0
Feign-声明式java Http客户端
Feign 是Netfilx开源的一个声明web服务客户端,这便得编写web服务客户端更容易,使用Feign 创建一个接口并对它进行注解,它具有可插拔的注解支持包括Feign注解与JAX-RS注解,Feign还支持可插拔的编码器与解码器,Spring Cloud 增加了对 Spring MVC的注解,Spring Web 默认使用了HttpMessageConverters, Spring Cloud 集成 Ribbon 和 Eureka 提供的负载均衡的HTTP客户端 Feign
kl博主
2018/04/13
4.1K0
还在用HttpUtil?试试这款优雅的HTTP客户端工具吧,跟SpringBoot绝配!
Retrofit是适用于Android和Java且类型安全的HTTP客户端工具,在Github上已经有39k+Star。其最大的特性的是支持通过接口的方式发起HTTP请求,类似于我们用Feign调用微服务接口的那种方式。
macrozheng
2022/02/23
1.8K0
还在用HttpUtil?试试这款优雅的HTTP客户端工具吧,跟SpringBoot绝配!
如何在 Spring Boot中使用 OpenAI ChatGPT API
有一些库可与 ChatGPT 集成,但本文介绍如何在没有任何外部依赖项的情况下使用 ChatGPT API。
lyb-geek
2024/04/16
4600
如何在 Spring Boot中使用 OpenAI ChatGPT API
精讲响应式webclient第1篇-响应式非阻塞IO与基础用法
RestTemplate作为spring-web项目的一部分,在Spring 3.0版本开始被引入。根据Spring官方文档及源码中的介绍,RestTemplate在将来的版本中它可能会被弃用, 作为替代,Spring官方已在Spring 5中引入了WebClient作为非阻塞式Reactive HTTP客户端。
字母哥博客
2020/09/23
2.6K0
精讲响应式webclient第1篇-响应式非阻塞IO与基础用法
Spring Boot 4 震撼发布!诸多特性一览!
今日在闲逛Spring Boot官方网站时,偶然发现继Spring Boot3.5.0版本GA之后,出现了4.0.0-SNAPSHOT版本。这意味着Spring Boot 4.0版本已经开始问世了。今天就一起来聊聊关于Spring Boot4的新版本变更。
有一只柴犬
2025/05/31
1.5K0
Spring Boot 4 震撼发布!诸多特性一览!
SpringBoot 2.0 开发案例之整合HTTP客户端Feign
在项目开发中,内部服务通常我们会采用PRC的方式进行调用,消费者和提供者统一引入第三方开源框架Dubbo,然后再配置个注册中心,真香!然而,项目中经常也会调用一些外部服务,比如短信、天气或者是撸主小黄图中的鉴黄,这时候Dubbo就显得有点无能为力了。撸主之前用的是SpringBoot自带的 RestTemplate,今天与大家来聊一聊SpringCloud家族的Feign。
小柒2012
2019/12/18
1.9K0
spring-boot项目优雅的http客户端工具,真香!
大家都知道okhttp是一款由square公司开源的java版本http客户端工具。实际上,square公司还开源了基于okhttp进一步封装的retrofit工具,用来支持通过接口的方式发起http请求。如果你的项目中还在直接使用RestTemplate或者okhttp,或者基于它们封装的HttpUtils,那么你可以尝试使用Retrofit。
java进阶架构师
2020/09/22
2.6K0
Spring WebFlux 教程:如何构建一个简单的响应应式 Web 应用程序
反应式系统是采用反应式架构模式设计的系统,该模式优先考虑使用松散耦合、灵活和可扩展的组件。它们在设计时还考虑了故障解决方案,以确保即使一个系统出现故障,大部分系统仍能运行。
用户4235284
2023/10/14
2.1K0
Spring WebFlux 教程:如何构建一个简单的响应应式 Web 应用程序
推荐阅读
相关推荐
还在用HttpUtil?SpringBoot 3.0全新HTTP客户端工具来了,用起来够优雅!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档