远程访问@HttpExchange

提示:这是SpringBoot3以上的新特性。

远程访问@HttpExchange

  • 一、webClient
  • 二、Http 服务器接口的方法定义
  • 三、声明式 HTTP 远程服务


  • 远程访问是开发的常用技术,一个应用能够访问其他应用的功能。Spring Boot 提供了多种远程访问技术。基于 HTTP 协议的远程访问是支持最广泛的。Spring Boot3 提供了新的 HTTP 访问能力,通过接口简化 HTTP 远程访问,类似 Feign 功能。Spring 包装了底层 HTTP 客户的访问细节
  • Spring Boot 中定义接口提供 HTTP 服务生成的代理对象实现此接口代理对象实现 HTTP 的远程访问。

一、webClient

  • 我们想要调用其他系统提供的 HTTP 服务,通常可以使用 Spring 提供的 RestTemplate 来访问,RestTemplate 是 Spring3 中引入的同步阻塞式 HTTP 客户端,因此存在一定性能瓶颈。Spring 官方在 Spring5 中引入了 WebClient 作为异步非阻塞式 HTTP 客户端。
    • 非阻塞,异步请求
    • 它的响应式编程是基于 Reactor
    • 高并发,硬件资源少
    • 支持 Java8 lambdas 函数函数式编程
  • 什么是同步和异步
    • 异步和同步针对调用者,调用者发送请求,如果等待对方回应之后才去做其他事情,就是同步,如果发送请求之后不等待对方回应就去做其他事情就是异步。
  • 什么是阻塞和非阻塞
    • 阻塞和非阻塞针对被调度者,被调度者 收到请求后,做完请求任务之后才给出反馈就是阻塞,收到请求之后马上给出反馈然后去做其他事情,就是非阻塞。

二、Http 服务器接口的方法定义

  • @HttpExchange 注解用于声明接口作为 HTTP 远程服务。在方法、类级别使用。通过注解属性以及方法的参数设置 HTTP 请求的细节。
    • @GetExchange 用于 HTTP GET 请求。一般用于获取数据。
    • @PostExchange 用于 HTTP POST 请求。一般用于提交数据。
    • @PutExchange 用于 HTTP PUT 请求。一般用于修改数据。
    • @PatchExchange 用于 HTTP PATCH 请求。
    • @DelectExchange 用于 HTTP DELETE 请求。一般用于删除数据。
  • 作为 HTTP 服务接口中的方法允许使用的参数
    参数说明
    URI设置请求的url,覆盖注解的url属性
    HttpMethod请求方式,覆盖注解的method属性
    @RequestHeader添加到请求中header。 参数类型可以为Map, MultiValueMap,单个值 或者 Collection
    @PathVariableurl中的占位符,参数可为单个值或Map
    @RequestBody请求体,参数是对象
    @RequestParam请求参数,单个值或Map, MultiValueMap,Collection
    @RequestPart发送文件时使用
    @CookieValue向请求中添加cookie
  • 接口中方法返回值
    返回值类型说明
    void执行请求,无需解析应答
    HttpHeaders存储 response 应答的 header 信息
    对象解析应答结果,转为声明的类型对象
    ResponseEntity<void>、ResonseEntity<T>解析应答内容,得到 ResponseEntity,从 ResponseEntity 可以获取 http 应答码、header、body等内容

三、声明式 HTTP 远程服务

  • 使用一个免费的、24小时 在线的 Rest Http 服务。===> https://jsonplaceholder.typicode.com/,其提供的 comments 服务。基于 RESTful 风格,添加新的 comments,修改 comments,查询某个具体的 comments。

  • ① 引入依赖

    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
    
  • ② 声明 comments 数据类

    public class Comment {
        private Integer postId;
        private Integer id;
        private String name;
        private String email;
        private String body;
    //构造方法、setter和getter方法、toString方法
    }
    
  • ③ 声明服务接口

    //其中的一个方法就是一个远程服务调用
    public interface CommonService {
        @GetExchange("/comments/{id}")
        Comment getCommentById(@PathVariable("id") Integer id);
    }
    
  • ④ 创建 HTTP 服务代理对象

    @Configuration(proxyBeanMethods = false)
    public class HttpConfiguration {
        @Bean
        public CommonService requestService(){
            WebClient webClient =WebClient.builder().build();
            return HttpServiceProxyFactory.builderFor(WebClientAdapter.create(webClient)).build().createClient(CommonService.class);
    
        }
    }
    
  • ⑤ 编写测试代码

    	@SpringBootTest
    	class HttpExchangeApplicationTests {
    	    @Autowired
    	    private CommonService commonService;
    	    @Test
    	    public void test(){
    	        Comment comment = commonService.getCommentById(1);
    	        System.out.println(comment);
    	    }
    	}
    
  • ⑥ 结果展示
    在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/359762.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

博云科技与中科可控全面合作,探索前沿金融科技新机遇

2024年1月26日&#xff0c;博云科技与中科可控在昆山高新区成功举办合作签约仪式。昆山市委常委、昆山高新区党工委书记孙道寻、中科可控董事长聂华、博云科技董事长花磊等领导出席了本次签约仪式。 中科可控将利用其在先进计算和智造领域的优势&#xff0c;为博云科技提供有关…

通过WSL2来实现Windows10/11的深度学习模型GPU加速,TensorFlow项,Jupyter及其插件安装,CQF心得,金融量化

通过WSL2来实现TF的GPU加速 为什么要用WSL&#xff08;Windows Subsystem Linux&#xff09;安装WSL2&#xff0c;miniconda&#xff0c;cuda&#xff0c;cudnn&#xff0c;TA-Lib安装 WSL2安装 Miniconda3安装 CUDA安装 cuDNN安装 TensorFlow 库安装 TA-Lib 库安装其它CQF及金…

立式台灯什么牌子好用又实惠?好用又实惠的台灯分享

近年来&#xff0c;随着电子产品越来越普及&#xff0c;社会的发展和生活方式的转变&#xff0c;视力不良和近视问题越发严重&#xff0c;全国学生体质与健康调研数据显示&#xff0c;从1985年起中国中小学生视力不良率持续上升&#xff0c;到2019年时&#xff0c;视力不良率已…

STM32——感应开关盖垃圾桶

STM32——感应开关盖垃圾桶 1.定时器介绍 软件定时 缺点&#xff1a;不精确、占用CPU资源 void Delay500ms() //11.0592MHz {unsigned char i, j, k;_nop_();i 4;j 129;k 119;do{do{while (--k);} while (--j);} while (--i); }定时器工作原理 使用精准的时基&#xff…

Orion-14B-Chat-Plugin [model server error]解决方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

MIT 6.5830 概述

简介 同MIT6.824系列类似&#xff0c;6.4830是关于Database System的一门课程&#xff0c;官方主页链接。 从课程信息可知&#xff0c;理论课分为 21 个课时&#xff0c;3个问题集&#xff0c;4个实验&#xff0c;1个项目。课程的 ppt 可以下载&#xff0c;对应的课堂回放可以…

【Delphi】IDE 工具栏错乱恢复

由于经常会在4K和2K显示器上切换Delphi开发环境(IDE)&#xff0c;导致IDE工具栏错乱&#xff0c;咋样设置都无法恢复&#xff0c;后来看到红鱼儿的博客&#xff0c;说是通过操作注册表的方法&#xff0c;能解决&#xff0c;试了一下&#xff0c;果真好用&#xff0c;非常感谢分…

WPF 提示无法启动PackIcon,因为已经启用仅平台控件选项

vs打开wpf项目的页面文件&#xff0c;提示如下&#xff1a; 点击此处重新加载设计器&#xff0c;页面无反应&#xff1b; 点击仅显示控制平台控件及重新加载时&#xff0c;页面可以显示&#xff0c;但是PackIocn不能显示&#xff0c;如下图&#xff1a; 切换后&#xff0c;如…

LVS常用的NAT模式和DR模式实战示例

引言&#xff1a;紧接上文&#xff0c;了解LVS&#xff0c;这一篇就够了-CSDN博客&#xff0c;今天我们对LVS常用的两种模式来进行示例配置演示 LVS-NAT模式 1、环境准备 准备 3 台纯净的虚拟机 关闭防火墙和selinux 例&#xff1a; lvs-server 添加两个网卡 NAT模式 …

Spring | Spring的“数据库开发“ (Srping JDBC)

目录&#xff1a; Spring JDBC1.Spring JDBC的核心类 ( JdbcTemplate类 )2.Srping JDBC 的配置3.JdbcTemplate类的“常用方法”execute( )&#xff1a;直接执行“sql语句”&#xff0c;没有返回值update( ) &#xff1a;“增删改”&#xff0c;返回 “影响的行数”query( ) : “…

C# OpenCvSharp DNN Gaze Estimation 视线估计

目录 介绍 效果 模型信息 项目 代码 frmMain.cs GazeEstimation.cs 下载 C# OpenCvSharp DNN Gaze Estimation 介绍 训练源码地址&#xff1a;https://github.com/deepinsight/insightface/tree/master/reconstruction/gaze 效果 模型信息 Inputs ----------------…

【Java程序设计】【C00214】基于SSM的社区物资购买系统(论文+PPT)

基于SSM的社区物资购买系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这个一个基于SSM的社区物资购物管理系统&#xff0c;本系统共分为二种权限&#xff1a;管理员、用户 管理员&#xff1a;首页、个人中心、用户管理、商品分类管…

1178:单词数

题目描述 统计一篇文章里不同单词的总数。 输入 有多组数据&#xff0c;每组一行&#xff0c;每组就是一篇小文章。每篇小文章都是由大小写字母和空格组成&#xff0c;没有标点符号&#xff0c;遇到#时表示输入结束。每篇文章的单词数小于1000&#xff0c;每个单词最多由30个…

serial库对串口的基本使用

serial库对串口的基本使用 serial库用于串口通信。它提供了一组函数和类&#xff0c;用于在计算机和外部设备之间进行串口通信。通过使用serial库可以读取和写入串口数据&#xff0c;以实现与各种外部设备的通信&#xff0c;如传感器、微控制器、嵌入式系统等。 支持多平台&a…

Linux浅学笔记03

目录 有关root的命令 用户和用户组 用户组管理&#xff1a;&#xff08;以下需要root用户执行&#xff09; 创建用户组: 删除用户组&#xff1a; 用户管理&#xff1a;&#xff08;以下需要root用户执行&#xff09; 创建用户&#xff1a; 删除用户&#xff1a; 查看用…

DataTable.Load(reader)注意事项

对于在C#中操作数据库查询&#xff0c;这样的代码很常见&#xff1a; using var cmd ExecuteCommand(sql); using var reader cmd.ExecuteReader(); DataTable dt new DataTable(); dt.Load(reader); ...一般的查询是没问题的&#xff0c;但是如果涉及主键列的查询&#xf…

宠物空气净化器有改善空气质量吗?猫用空气净化器哪些品牌好?

大家都知道&#xff0c;在宠物换毛季节&#xff0c;宠物的掉毛非常严重&#xff0c;几乎遍布整个家里。这给家中的小孩和老人带来了很多困扰&#xff0c;可能导致他们流鼻涕、过敏等问题。此外&#xff0c;猫咪有时候会随地拉撒&#xff0c;那个味道真的很难闻。家里的其他人对…

妈妈,我的压岁钱呢?

这是老郭的第30篇原创文章 春节的脚步越来越近&#xff0c;又到了孩子们欢天喜地收压岁钱的时刻。但是&#xff0c;如何让这笔“意外之财”变成孩子们的“大财富”呢&#xff1f; 孩子的想法 哈哈&#xff0c;终于拿到了压岁钱&#xff01; 我要买那个新出的游戏、那个最酷的玩…

wordcloud库和jieba库的使用

文章目录 wordcloud库的简单示范使用wordcloud库报错记录anaconda安装第三方jieba库jieba库的简单示范任务 1&#xff1a;三国演义中的常见词汇分布在“三国"这两个隶书字上&#xff0c;出现频率高的词字体大任务 2&#xff1a;三国演义中出现频率前十的人名。必须是以下这…

如何快速记忆小鹤双拼键位图?

记忆方法&#xff1a;韵母表 图形 最常用字 韵母表&#xff1a;双拼的基础 图形&#xff1a;帮助新手快速联想回忆 最常用字&#xff1a;快速打字基础 一、单韵母&#xff08;紫色方块&#xff09; 一一对应如下表&#xff1a; 单韵母aoeiu、AOEIV 二、复韵母—箭矢型&am…