首页 > 其他分享 >SpringBoot 3.0 新特性,内置声明式 HTTP 客户端

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

时间:2022-12-01 11:35:25浏览次数:80  
标签:http SpringBoot Spring 3.0 interface HTTP requests 客户端

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

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 一个可支持企业各业务系统或产品快速开发实现的开源微服务应用开发平台

标签:http,SpringBoot,Spring,3.0,interface,HTTP,requests,客户端
From: https://www.cnblogs.com/leng-leng/p/16940885.html

相关文章

  • 物联网安全——本质上是UDP RCE漏洞:tddp 协议,https://www.anquanke.com/post/id/18320
    由一道工控路由器固件逆向题目看命令执行漏洞阅读量349885|评论7|发布时间:2019-08-0116:30:06 前言2019工控安全比赛第一场的一道固件逆向的题目,好像也比......
  • SpringBoot启动流程
    run方法启动时传入了当前类ContractApplication.class,传入当前类的作用主要是为了解析当前类上面的注解(不一定传递当前类,也可以自己写一个类,在写的类上添加对应的注解)......
  • SpringBoot+Bootstrap+Thymeleaf+Restful 实现图书商城管理
    课程名称:企业项目实训II设计题目:大学当图书商城已知技术参数和设计要求:1.问题描述(功能要求):1.1顾客端1)注册登录:游客可浏览所有图书,只有注册用户才能添加购物车、下订单......
  • vue 3.0
    1.安装最新vue环境cnpmi-gvue@vue/cli  要确保环境是4.5以上的版本2.创建项目vuecreate(你的项目名称:vue3demo)根据需要选择下面相关组件......
  • SpringBoot项目出现404错误--且控制台无任何信息
    直接上链接:(138条消息)SpringBoot项目出现404错误_露天赏雪的博客-CSDN博客_springboot404我自己的错误原因:有启动类的包,也有自己的包,但包不在一起,所以根本访问不到自己......
  • HTTP与HTML基础知识
    今日内容概要前端与后端的概念超文本传输协议HTTP超文本标记语言HTML今日内容详细前端与后端的概念前端用于展示及获取数据的界面就是前端,前端的终点在于页面设计......
  • 前端与后端的概念、前端前戏、HTTP协议、HTML简介、HTML概览、预备知识、head内常见标
    目录前端与后端的概念前端前戏HTTP协议HTML简介HTML概览预备知识head内常见标签body内基本标签常见符号body内布局标签body内常用标签列表标签表格标签表单标签前端与后端......
  • vuecli3项目集成到springboot
    路径配置当springboot中设置项目访问路径server.servlet.context-path=/demovue项目中vue.config.js需配置publicPathmodule.exports={transpileDependenc......
  • 进入python的世界_day42_前端——何为前端、HTTP、HTML、head和body以及常用标签
    一、前端1.何为前端​ 与用户打交道的操作界面即为前端,一般都是做了美化的2.前端核心基础HTML>>>:网页的骨架CSS>>>:网页的样式JS>>>:网页的动态(比如说滑动......
  • HTTP2 协议长文详解
    一、HTTP2简介HTTP2是一个超文本传输协议,它是HTTP协议的第二个版本。HTTP2主要是基于google的SPDY协议,SPDY的关键技术被HTTP2采纳了,因此SPDY的成员全程参与......