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

这篇具有很好参考价值的文章主要介绍了SpringBoot 3.0 新特性,内置声明式HTTP客户端。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

http interface

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

什么是声明式客户端

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

  • 举个例子,如果想调用 /tenants 的接口,只需要定义如下的接口类即可
public interface TenantClient {

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

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


@Autowired
TenantClient tenantClient;

tenantClient.getAll().subscribe(

);

测试使用

1. maven 依赖

<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
SpringBoot 3.0 新特性,内置声明式HTTP客户端

2. 创建 Http interface 类型

  • 需要再接口类上添加 @HttpExchange 声明此类事 http interface 端点
@HttpExchange
public interface DemoApi {

    @GetExchange("/admin/tenant/list")
    String list();

  • 方法上支持如下注解
@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.
  • 方法参数支持的注解
@PathVariable: 占位符参数.
@RequestBody: 请求body.
@RequestParam: 请求参数.
@RequestHeader: 请求头.
@RequestPart: 表单请求.
@CookieValue: 请求cookie.

2. 注入声明式客户端

  • 通过给 HttpServiceProxyFactory 注入携带目标接口 baseUrl 的的 webclient,实现 webclient 和 http interface 的关联
    @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


@SpringBootTest
class DemoApplicationTests {
	@Autowired
	private DemoApi demoApi;

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

基于Spring Boot 2.7、 Spring Cloud 2021 & Alibaba、 SAS OAuth2 一个可支持企业各业务系统或产品快速开发实现的开源微服务应用开发平台文章来源地址https://www.toymoban.com/news/detail-428470.html

到了这里,关于SpringBoot 3.0 新特性,内置声明式HTTP客户端的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【微服务】5、声明式 HTTP 客户端 —— Feign

    ✏️ 代码可读性差、编程体验不统一 ✏️ 当发送网络请求时的请求参数特别复杂的时候,URL 难以维护 ✏️ Github 地址:https://github.com/OpenFeign/feign ✏️ Feign 是一个 声明式 的 HTTP 客户端 ✏️ 可帮助开发者优雅地发送 HTTP 请求 ✏️ 依赖 ✏️ 启动开关 @EnableFeignClients ✏️

    2023年04月12日
    浏览(34)
  • 7、hive shell客户端与属性配置、内置运算符、函数(内置运算符与自定义UDF运算符)

    1、apache-hive-3.1.2简介及部署(三种部署方式-内嵌模式、本地模式和远程模式)及验证详解 2、hive相关概念详解–架构、读写文件机制、数据存储 3、hive的使用示例详解-建表、数据类型详解、内部外部表、分区表、分桶表 4、hive的使用示例详解-事务表、视图、物化视图、DDL

    2024年02月09日
    浏览(48)
  • Redis 6.0的新特性:多线程、客户端缓存与安全

    2020年5月份,6.0版本。 面向网络处理的多IO线程可以提高网络请求处理的速度,而客户端缓存可以让应用直接在客户端本地读取数据,这两个特性可以提升Redis的性能。 细粒度权限控制让Redis可以按照命令粒度控制不同用户的访问权限,加强了Redis的安全保护。 RESP 3协议则增强

    2024年02月14日
    浏览(37)
  • Apache IoTDB v1.3.0 发布|增加客户端服务器 SSL 通讯加密、写入负数时间戳等功能...

    Release Announcement   Version 1.3.0   Apache IoTDB v1.3.0 已经发布,主要新增 SSL 通讯加密、数据同步监控项统计等新特性,优化了原有权限模块的语法和逻辑、metrics 算法库性能、Python 客户端写入性能以及在部分查询场景下的查询效率,修复部分产品 bug 和性能问题。 欢迎在我们的网

    2024年01月17日
    浏览(58)
  • http客户端Fegin

    代码可读性差,编程体验不统一 参数复杂URL难以维护 Feign是声明式的http客户端(只需要将发http请求的信息写出即可)  主要基于SpringMvc的注解来声明远程调用的信息:  步骤: 1.引入依赖 2.添加EnableFeignClients注解 3.编写FeignClient接口 4.使用FeigClient中定义的方法代替RestTempl

    2024年02月09日
    浏览(41)
  • 39 | Redis 6.0的新特性:多线程、客户端缓存与安全

    这个版本中有很多的新特性。所以,6.0 刚刚推出,就受到了业界的广泛关注。所以,在课程的最后, 这节想来聊聊 Redis 6.0 中的几个关键新特性,分别是面向网络处理的多 IO 线程、客户端缓存、细粒度的权限控制,以及 RESP 3 协议的使用。 其中,面向网络处理的多 IO 线程可

    2024年04月10日
    浏览(43)
  • SOAP学习之一:Visual C++创建简单的客户端--使用soap toolkit 3.0获取UTC服务器时间

    初始接触 XML及SOAP第一天,摸不着头绪,看了很多文章,总结一下几点心得,附一个小例子使用VC++控制台程序获取UTC服务器时间。 看到的资料VC++都是使用soap toolkit来使用SOAP,soap toolkit目前看最高版本应该是3.0,但是微软已经不再对soap toolkit提供技术支持及更新,在微软官网

    2024年02月09日
    浏览(65)
  • 微服务——http客户端Feign

    目录 Restemplate方式调用存在的问题 Feign的介绍 基于Feign远程调用 Feign自定义配置 修改日志方式一(基于配置文件) 修改日志方式二(基于java代码) Feign的性能优化 连接池使用方法  Feign_最佳实践分析   方式一: 方式二  实现Feign最佳实践(方式二)  两种解决方案 就像早期的事务

    2024年02月15日
    浏览(52)
  • 【WebClient】客户端HTTP 超时配置

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 1、项目升级到Springboot3,使用WebFlux自带的WebClient作为HTTP客户端 2、接口类客户端方式调用外部服务,默认超时5S 3、需根据业务动态修改超时时间,如60S 报错如下: java.lang.IllegalStateException: Timeout on bl

    2024年02月12日
    浏览(41)
  • Http客户端OkHttp的基本使用

    OkHttp是一个强大的开源HTTP客户端,它被广泛用于Android和Java应用程序中。OkHttp具有简单易用的API,提供了许多高级功能,如连接池、请求压缩和缓存等。 要使用OkHttp,需要在项目的构建文件中添加以下依赖: 请将 x.x.x 替换为您希望使用的OkHttp版本号。 GET请求 以下是发送G

    2024年02月09日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包