动力节点王鹤Springboot3笔记——第六章远程访问@HttpExchange[SpringBoot 3]

HttpExchange注解用于声明接口作为HTTP远程服务。在方法、类级别使用。通过注解属性以及方法的参数设置HTTP请求的细节。快捷注解简化不同的请求方式@GetExchange就是@HttpExchange表示的GET请求方式作为HTTP服务接口中的方法允许使用的参数列表参数说明URI设置请求的url,覆盖注解的url属性HttpMethod请求方式,覆盖注解的method属性添加到请求中header。参数类型可以为Map
摘要由CSDN通过智能技术生成

目录

第六章  远程访问@HttpExchange[SpringBoot 3]

6.1.1.1  准备工作: 

6.1.1.2 声明式HTTP远程服务 

6.1.1.3 Http服务接口的方法定义

6.1.1.4 组合使用注解 

6.1.1.5 Java Record

6.1.1.6  定制HTTP请求服务 


第六章  远程访问@HttpExchange[SpringBoot 3]

远程访问是开发的常用技术,一个应用能够访问其他应用的功能。Spring Boot提供了多种远程访问的技术。 基于HTTP协议的远程访问是支付最广泛的。Spring Boot3提供了新的HTTP的访问能力,通过接口简化HTTP远程访问,类似Feign功能。Spring包装了底层HTTP客户的访问细节。 

SpringBoot中定义接口提供HTTP服务。生成的代理对象实现此接口,代理对象实现HTTP的远程访问。需要理解:

  • @HttpExchange
  • WebClient 

WebClient特性: 

我们想要调用其他系统提供的 HTTP 服务,通常可以使用 Spring 提供的 RestTemplate 来访问,RestTemplate 是 Spring 3 中引入的同步阻塞式 HTTP 客户端,因此存在一定性能瓶颈。Spring 官方在 Spring 5 中引入了 WebClient 作为非阻塞式HTTP 客户端。

  • 非阻塞,异步请求
  • 它的响应式编程的基于Reactor
  • 高并发,硬件资源少。
  • 支持Java 8 lambdas 函数式编程 

什么是异步非阻塞 

理解:异步和同步,非阻塞和阻塞
上面都是针对对象不一样
异步和同步针对调度者,调用者发送请求,如果等待对方回应之后才去做其他事情,就是同步,如果发送请求之后不等着对方回应就去做其他事情就是异步
阻塞和非阻塞针对被调度者,被调度者收到请求后,做完请求任务之后才给出反馈就是阻塞,收到请求之后马上给出反馈然后去做事情,就是非阻塞 

6.1.1.1  准备工作: 

1.安装GsonFormat插件,方便json和Bean的转换

2.介绍一个免费的、24h在线的Rest Http服务,每月提供近20亿的请求,关键还是免费的、可公开访问的。 

6.1.1.2 声明式HTTP远程服务 

需求: 访问 https://jsonplaceholder.typicode.com/  提供的todos服务。 基于RESTful风格,添加新的todo,修改todo,修改todo中的title,查询某个todo。声明接口提供对象https://jsonplaceholder.typicode.com/todos 服务的访问

创建新的Spring Boot项目Lession18-HttpService, Maven构建工具,JDK19。 Spring Web, Spring Reactive Web , Lombok依赖。

step1:Maven依赖pom.xml 

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

 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
 </dependency>
 <dependency>
  <groupId>io.projectreactor</groupId>
  <artifactId>reactor-test</artifactId>
  <scope>test</scope>
 </dependency>
</dependencies>

step2:声明Todo数据类

/**
 * 根据https://jsonplaceholder.typicode.com/todos/1 的结构创建的
 */
public class Todo {
  private int userId;
  private int id;
  private String title;
  private boolean completed;

  //省略 set , get方法

  public boolean getCompleted() {
    return completed;
  }

  public void setC
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值