使用WebClient 快速发起请求(不使用WebClientUtils工具类)

使用WebClient发起网络请求_webclient工具类-CSDN博客文章浏览阅读717次,点赞9次,收藏8次。使用WebClient发起网络请求_webclient工具类https://blog.csdn.net/qq_43544074/article/details/137044825这个是使用工具类发起的,下面就不使用工具类进行快速发起。

同样的导入依赖

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-webflux -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId><version>3.3.4</version>
</dependency>

然后定义初始化构建一下

    private final WebClient webClient;@Autowiredpublic 类名_Controller(WebClient.Builder webClientBuilder) {this.webClient = webClientBuilder.build();}// 获取请求地址@Value("${dataCenter.dc2DetailUrl}")private String dc2DetailUrl;@Value("${dataCenter.prePlatformInfoUrl}")private String prePlatformInfoUrl;@Value("${dataCenter.parmsSetUrl}")private String parmsSetUrl;

接下来就可以进行各个方式的请求和调用处理了

GET方式:

// ==[GET]=========================================@ApiOperation("数据查询接口")@Synchronized@GetMapping("/data-detail")public Mono<AjaxResult> dataLoadDetail() throws Exception {// 设置请求头信息HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);headers.set("api_permanent_key", tempToken);return webClient.get().uri(dc2DetailUrl)// 添加请求头.headers(httpHeaders -> httpHeaders.addAll(headers)).retrieve().bodyToMono(String.class).map(response -> {log.info("请求数据返回响应 response = " + response);try {// 解析 JSON 数据JSONObject jsonObject = JSONObject.parseObject(response);log.info("请求数据返回响应 jsonObject = " + jsonObject);// 将处理后的数据转换为 AjaxResult 返回return AjaxResult.success(jsonObject);} catch (Exception e) {log.error("数据处理失败: {}", e.getMessage());// JSON 解析失败return AjaxResult.error("数据处理失败" + e.getMessage());}}).onErrorResume(e -> {log.error(preCountryUrl + "GET 请求失败: {}", e.getMessage());// 这里可以进行更多的日志记录或错误处理return Mono.just(AjaxResult.error("GET 请求失败" + e.getMessage()));});}

有参数查询:

    @ApiOperation("查询某个类型下的个体接口")@ApiImplicitParams({@ApiImplicitParam(name = "platTypeName", value = "类型名称", required = false, dataType = "String", paramType = "query", example = "电器", dataTypeClass = String.class),@ApiImplicitParam(name = "platTypeId", value = 类型ID", required = false, dataType = "Integer", paramType = "query", example = "5", dataTypeClass = Integer.class)})@GetMapping("/pre-platform-info")public Mono<AjaxResult> prePlatformInfo(@RequestParam(value = "platTypeName", required = false) String platTypeName,@RequestParam(value = "platTypeId", required = false) Integer platTypeId) {log.info("platTypeName = {}, platTypeId = {}", platTypeName, platTypeId);// 设置请求头信息HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);headers.set("api_permanent_key", tempToken);// 构建 URIString uri = UriComponentsBuilder.fromHttpUrl(prePlatformInfoUrl).queryParam("platTypeName", platTypeName).queryParam("platTypeId", platTypeId).toUriString();log.info("uri = {}", uri);return webClient.get().uri(uri).headers(httpHeaders -> httpHeaders.addAll(headers)).retrieve().bodyToMono(String.class).map(response -> {log.info("请求数据返回响应 response = {}", response);try {// 解析 JSON 数据JSONObject jsonObject = JSONObject.parseObject(response);// 将处理后的数据转换为 AjaxResult 返回return AjaxResult.success(jsonObject);} catch (Exception e) {log.error("JSON 解析失败", e);// JSON 解析失败return AjaxResult.error("数据处理失败: " + e.getMessage());}}).onErrorResume(e -> {log.error("GET 请求失败", e);return Mono.just(AjaxResult.error("GET 请求失败: " + e.getMessage()));});}

POST方式 

	// ==[POST]=========================================@ApiOperation("参数设置接口")@PostMapping("/set-predict-time")public Mono<AjaxResult> setPredictTime(@RequestBody JSONObject jsonObject) throws Exception {// 组装请求头HashMap<String, String> headers = new HashMap<>();headers.put("Content-Type", "application/json");// 组装请求体String requestBody = jsonObject.toJSONString();log.info("请求体是 " + requestBody);// 发送请求return webClient.post().uri(parmsSetUrl).header(HttpHeaders.CONTENT_TYPE, "application/json").bodyValue(requestBody) // 使用 bodyValue 直接传递请求体.retrieve().bodyToMono(String.class).flatMap(this::handleResponse) // 将响应处理逻辑提取到单独的方法中.onErrorResume(this::handleError); // 错误处理提取到方法中}// 处理响应private Mono<AjaxResult> handleResponse(String response) {log.info("请求数据返回响应 response = {}", response);try {// 解析 JSON 数据JSONObject res = JSONObject.parseObject(response);// 将处理后的数据转换为 AjaxResult 返回return Mono.just(AjaxResult.success(res.getJSONArray("rows")));} catch (Exception e) {// JSON 解析失败return Mono.just(AjaxResult.error("数据处理失败: " + e.getMessage()));}}// 错误处理private Mono<AjaxResult> handleError(Throwable e) {log.error("GET 请求失败: {}", e.getMessage(), e);return Mono.just(AjaxResult.error("GET 请求失败: " + e.getMessage()));}
    @ApiOperation("参数设置接口")@PostMapping("/set-predict-time")public Mono<AjaxResult> setPredictTime(@RequestBody JSONObject jsonObject) throws Exception {// 组装请求头HashMap<String, String> headers = new HashMap<>();headers.put("Content-Type", "application/json");// 组装请求体String requestBody = jsonObject.toJSONString();log.info("请求体是 " + requestBody);// 发送请求return webClient.post().uri(parmsSetUrl).header(HttpHeaders.CONTENT_TYPE, "application/json").bodyValue(requestBody) // 使用 bodyValue 直接传递请求体.retrieve().bodyToMono(String.class).map(response -> {log.info("请求数据返回响应 response = " + response);try {// 解析 JSON 数据JSONObject res = JSONObject.parseObject(response);// 将处理后的数据转换为 AjaxResult 返回return AjaxResult.success(res);} catch (Exception e) {// JSON 解析失败return AjaxResult.error("数据处理失败" + e.getMessage());}}).onErrorResume(e -> {// 这里可以进行更多的日志记录或错误处理return Mono.just(AjaxResult.error("POST 请求失败" + e.getMessage()));});}

至此就可以快速的发起网络请求了!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java基础(4)类和对象

目录 1.前言 2.正文 2.1类的定义与使用 2.1.1类的定义 2.1.2类的实例化 2.1.3this引用 2.1.3.1 访问当前对象的成员变量 2.1.3.2调用当前对象的成员方法 2.1.3.3构造函数中的 this 2.1.3.4归纳this 2.2封装 2.2.1封装的定义 2.2.2访问修饰符 2.3static 2.3.1sta…

“卷”智能, 从高质量算力开始

算力即国力&#xff0c;这已是产业共识。 当人工智能浪潮席卷全球之际&#xff0c;大家深刻感受到发展算力产业的重要性和紧迫性&#xff0c;高质量的人工智能算力已经与国家竞争、产业升级和企业转型息息相关。 去年&#xff0c;《算力基础设施高质量发展行动计划》的颁布&a…

网络安全中的 EDR 是什么:概述和功能

专业知识&#xff1a;EDR、XDR、NDR 和 MDR_xdr edr ndr-CSDN博客 端点检测和响应 (EDR) 是一种先进的安全系统&#xff0c;用于检测、调查和解决端点上的网络攻击。它可以检查事件、检查行为并将系统恢复到攻击前的状态。EDR 使用人工智能、机器学习和威胁情报来避免再次发生攻…

CentOS7 离线部署docker和docker-compose环境

一、Docker 离线安装 1. 下载docker tar.gz包 下载地址&#xff1a; Index of linux/static/stable/x86_64/ 本文选择版本&#xff1a;23.0.6 2.创建docker.service文件 vi docker.service文件内容如下&#xff1a; [Unit] DescriptionDocker Application Container Engi…

【MySQL】数据库的介绍以及数据库基础

目录 &#x1f333;介绍 &#x1f384;数据库操作 &#x1f6a9;显示当前数据库 &#x1f6a9;创建数据库 ​编辑&#x1f6a9;使用/选中 数据库 &#x1f6a9;删除数据库 &#x1f334;常用的数据类型 &#x1f6a9;数值类型 &#x1f6a9;字符串类型 &#x1f6a9…

【自用软件】IDM下载器 Internet Download Manager v6.42 Build 10

下载IDM&pj安装教程 Internet Download Manager&#xff0c;简称 IDM&#xff0c;是国外的一款优秀下载工具。目前凭借着下载计算的速度优势在外媒网站中均受好评&#xff0c;现在已被多数国人熟知。Internet Download Manager 提升你的下载速度最多达5倍&#xff0c;安排下…

【HarmonyOS】深入理解LocalStorage之逻辑处理存取

【HarmonyOS】深入理解LocalStorage 一、前言 鸿蒙应用中关于状态管理的处理机制有很多。从状态装饰器State prop等&#xff0c;LocalStrong&#xff0c;AppStrong到首选项&#xff0c;再到数据库。内存到持久化。轻量级到重量级。全方位覆盖。 学习和记忆技术点&#xff0c…

Java-数据结构-Map和Set-(二)-哈希表 |ू・ω・` )

文本目录&#xff1a; ❄️一、哈希表&#xff1a; ☑ 1、概念&#xff1a; ☑ 2、冲突-概念&#xff1a; ☑ 3、冲突-避免&#xff1a; ☞ 1&#xff09;、避免冲突-哈希函数的设计&#xff1a; ☞ 2&#xff09;、避免冲突-负载因子调节(重点)&#xff1a; ☑ 4、冲突-解决&…

那年我双手插兜,使用IPv6+DDNS动态域名解析访问NAS

估计有很多科技宅和我一样&#xff0c;会买一个NAS存储或者自己折腾刷一下黑群晖玩玩&#xff0c;由于运营商不给分配固定的公网IP&#xff0c;就导致我在外出的时候无法访问家里的NAS&#xff0c;于是远程访问常常受到IP地址频繁变动的困扰。为了解决这一问题&#xff0c;结合…

element 输入框文字+对应签进行长度 和 的判断

输入文字长度 指定标签的长度 &#xff08;判断长度并提示&#xff09; <div style"position: relative;" classchangyongyu><el-input type"textarea" :autosize"{ minRows: 8, maxRows: 8 }" style"margin-bottom:10px;"…

【React】useEffect

1. 基本介绍 概念 语法 副作用函数依赖项数组&#xff08;空数组时&#xff0c;只会在组件渲染完毕后执行一次副作用函数&#xff09; 2. 使用 import { useEffect, useState } from reactfunction App() {const [value, setValue] useState(0)useEffect(() > {console…

如何使用ssm实现小区物业管理系统

TOC ssm733小区物业管理系统jsp 第一章 绪论 1.1 研究背景 在现在社会&#xff0c;对于信息处理方面&#xff0c;是有很高的要求的&#xff0c;因为信息的产生是无时无刻的&#xff0c;并且信息产生的数量是呈几何形式的增加&#xff0c;而增加的信息如何存储以及短时间分析…

基于微信小程序的美食外卖管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

SPI驱动学习七(SPI_Slave_Mode驱动程序框架)

目录 一、SPI_Slave_Mode驱动程序框架1. Master和Slave模式差别1.1 主设备 (Master)1.2 从设备 (Slave)1.3 示例 2. SPI传输概述2.1 数据组织方式2.2 SPI控制器数据结构 3. SPI Slave Mode数据传输过程4. 如何编写程序4.1 设备树4.2 内核相关4.3 简单的示例代码4.3.1 master和s…

Anaconda虚拟环境默认路径在C盘怎么更改

笔者已经新建好了虚拟环境并且安装了对应库&#xff0c;输入conda env list查询发现虚拟环境竟然安装到了C盘(&#xff61;•́︿•̀&#xff61;)&#xff0c;为避免下一次创建虚拟环境出错&#xff0c;笔者现在修改默认路径置D盘&#xff08;软件安装盘&#xff09; 参考两…

【Oauth2整合gateway网关实现微服务单点登录】

文章目录 一.什么是单点登录&#xff1f;二.Oauth2整合网关实现微服务单点登录三.时序图四.代码实现思路1.基于OAuth2独立一个认证中心服务出来2.网关微服务3产品微服务4.订单微服务5.开始测试单点登录 一.什么是单点登录&#xff1f; 单点登录&#xff08;Single Sign On&…

【YOLO目标检测车牌数据集】共10000张、已标注txt格式、有训练好的yolov5的模型

目录 说明图片示例 说明 数据集格式&#xff1a;YOLO格式 图片数量&#xff1a;10000&#xff08;2000张绿牌、8000张蓝牌&#xff09; 标注数量(txt文件个数)&#xff1a;10000 标注类别数&#xff1a;1 标注类别名称&#xff1a;licence 数据集下载&#xff1a;车牌数据…

小程序-生命周期与WXS脚本

生命周期 什么是生命周期 生命周期&#xff08;Life Cycle&#xff09;是指一个对象从创建 -> 运行 -> 销毁的整个阶段&#xff0c;强调的是一个时间段。 我们可以把每个小程序运行的过程&#xff0c;也概括为生命周期&#xff1a; 小程序的启动&#xff0c;表示生命…

ant design vue中带勾选表格报Tree missing follow keys: ‘undefined‘解决方法

1、这里一定要给columns和data-source设置key即可。 <div><a-table:row-selection"rowSelection":dataSource"tableList":columns"columns":scroll"{ x: 100% }":pagination"false":loading"loading"&g…

C++ -- 异常

C中的异常是用于处理程序执行过程中出现的错误情况。通过异常处理&#xff0c;程序可以在遇到错误时优雅地处理这些问题&#xff0c;而不是直接崩溃。 C语言处理错误的方式 C语言传统的处理错误的方式主要有两种&#xff1a; 终止程序&#xff1a;使用如assert这样的宏来检查…