SpringBoot访问外部接口的常见方式

文章目录

  • SpringBoot访问外部接口
    • 模拟服务接口
    • RestTemplate
      • pom.xml
      • RestTemplateConfig
      • ClientTestRestTemplateController.java
      • 结果
    • WebClient
      • pom.xml
      • ClientTestWebClientController.java
      • 结果
    • HttpClient
      • pom.xml
      • ClientTestHttpClientController.java
      • 结果
    • OkHttp
      • pom.xml
      • ClientTestOkHttpController.java
      • 结果

SpringBoot访问外部接口

模拟服务接口

package com.sin.controller;import org.springframework.web.bind.annotation.*;import java.util.HashMap;
import java.util.Map;/*** @createTime 2023/12/20 9:25* @createAuthor SIN* @use*/
@RestController
@RequestMapping("/service")
public class ServiceTestController {private Map serviceMap = new HashMap();@GetMapping("/getData")public Map getServiceMap() {return serviceMap;}@PostMapping("/setData")public String setServiceMap(@RequestBody Map serviceMap) {this.serviceMap = serviceMap;return "添加成功";}}

RestTemplate

RestTemplate是Spring提供的一个HTTP客户端,可以用来发送HTTP请求并处理响应。

pom.xml

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

RestTemplateConfig

package com.sin.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequest;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;/*** @createTime 2023/12/20 9:32* @createAuthor SIN* @use*/
@Configuration
public class RestTemplateConfig {// 注册RestTemplate实例为bean@Beanpublic RestTemplate restTemplate(ClientHttpRequestFactory factory){return new RestTemplate(factory);}// 注册ClientHttpRequestFactory实例为bean@Beanpublic ClientHttpRequestFactory clientHttpRequestFactory(){// 创建SimpleClientHttpRequestFactory实例SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();// 设置读取超时时间为5000毫秒factory.setReadTimeout(5000);// 设置连接超时时间为5000毫秒factory.setConnectTimeout(5000);return factory;}
}

ClientTestRestTemplateController.java

package com.sin.controller;import com.sin.config.RestTemplateConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;import java.util.HashMap;
import java.util.Map;/*** @createTime 2023/12/20 9:31* @createAuthor SIN* @use 使用RestTemplate来发送HTTP请求*/
@RestController
public class ClientTestRestTemplateController {@Autowiredprivate RestTemplate restTemplate;/*** 调用url路径添加数据* @return 返回发送请求后的响应结果,作为HTTP响应返回给客户端。*/@GetMapping("/addData")public String addData(){// 指定要发送POST请求的目标url路径String url = "http://localhost:8080/service/setData";// 添加数据Map map = new HashMap();map.put("id",1);map.put("name","张三");// 使用postForObject来发送POST请求(目标url,请求体参数,以字符串形式相应)return restTemplate.postForObject(url,map,String.class);}
}

结果

未添加数据之前

在这里插入图片描述

添加数据

在这里插入图片描述

添加数据之后

在这里插入图片描述

WebClient

RestTemplate有可能在未来的版本中被弃用,WebClient是Spring 5中新增的一个HTTP客户端,支持异步调用和响应式编程等特性,来代替RestTemplate

pom.xml

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version>
</dependency>

ClientTestWebClientController.java

package com.sin.controller;import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;/*** @createTime 2023/12/20 9:54* @createAuthor SIN* @use*/
@RestController
public class ClientTestWebClientController {@GetMapping("/addData")public Object addData(){// 指定要发送POST请求的目标url路径String url = "http://localhost:8080/service/setData";// 添加数据Map map = new HashMap();map.put("name","sin");// 添加数据转换为json数据String requestJson =  JSON.toJSONString(map);// 异步单值容器Mono mono = WebClient// 创建webClient实例.create()// post请求.post()// 请求的url路径.uri(url)// 指定请求的为json.contentType(MediaType.APPLICATION_JSON)// 请求参数.bodyValue(requestJson)// 获取相应结果.retrieve()// 将结果转换为String类型.bodyToMono(String.class);// 获取异步结果return mono.block();}
}

结果

未添加数据之前

在这里插入图片描述

添加数据

在这里插入图片描述

添加数据之后

在这里插入图片描述

HttpClient

HttpClient是Apache的一个开源HTTP客户端,可以用来发送HTTP请求并处理响应。虽然不是Spring提供的组件,但可以与Spring集成使用。

pom.xml

<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version>
</dependency>

ClientTestHttpClientController.java

package com.sin.controller;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/*** @createTime 2023/12/20 11:02* @createAuthor SIN* @use*/
@RestController
public class ClientTestHttpClientController {@GetMapping("/addData")public String addData() throws IOException {// 创建HttpClient对象HttpClient httpClient = HttpClientBuilder.create().build();// 创建HttpPost对象,并设置URLHttpPost httpPost = new HttpPost("http://localhost:8080/service/setData");// 添加Header信息httpPost.addHeader("Content-Type", "application/json");// 创建Map数据Map<String, Object> data = new HashMap<>();data.put("name", "张三");data.put("age", 20);// 将Map数据转换为JSON格式String json = new ObjectMapper().writeValueAsString(data);// 创建StringEntity对象,并将JSON数据作为参数传入StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);// 设置请求体httpPost.setEntity(entity);// 发送POST请求HttpResponse response = httpClient.execute(httpPost);// 获取响应实体HttpEntity responseEntity = response.getEntity();// 打印响应结果String result = EntityUtils.toString(responseEntity);return result;}
}

结果

未添加数据之前

在这里插入图片描述

添加数据

在这里插入图片描述

添加数据之后

在这里插入图片描述

OkHttp

OkHttp是Square公司开发的一个高性能的HTTP客户端,具有连接池、缓存、拦截器等功能。虽然不是Spring提供的组件,但可以与Spring集成使用。

pom.xml

<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.9.1</version>
</dependency>

ClientTestOkHttpController.java

package com.sin.controller;import com.fasterxml.jackson.databind.ObjectMapper;
import okhttp3.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.IOException;
import java.util.HashMap;
import java.util.Map;/*** @createTime 2023/12/20 11:10* @createAuthor SIN* @use*/
@RestController
public class ClientTestOkHttpController {@GetMapping("/addData")public String addData() throws IOException {// 创建OkHttpClient对象OkHttpClient client = new OkHttpClient();// 创建Map数据Map<String, Object> data = new HashMap<>();data.put("1", 1);data.put("2", 2);// 将Map数据转换为JSON格式String json = new ObjectMapper().writeValueAsString(data);// 设置请求体RequestBody body = RequestBody.create(json, MediaType.parse("application/json"));// 创建Request对象,并设置URL和请求体Request request = new Request.Builder().url("http://localhost:8080/service/setData").post(body).build();// 发送请求并获取响应Response response = client.newCall(request).execute();// 获取响应结果String result = response.body().string();return result;}
}

结果

未添加数据之前

在这里插入图片描述

添加数据

在这里插入图片描述

添加数据之后

在这里插入图片描述

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

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

相关文章

LeetCode Hot100 295.数据流的中位数

题目&#xff1a; 中位数是有序整数列表中的中间值。如果列表的大小是偶数&#xff0c;则没有中间值&#xff0c;中位数是两个中间值的平均值。 例如 arr [2,3,4] 的中位数是 3 。例如 arr [2,3] 的中位数是 (2 3) / 2 2.5 。 实现 MedianFinder 类: MedianFinder() 初始…

linux sed命令操作大全

经常使用&#xff0c;但有些总记不全&#xff0c;有时候经常查找&#xff0c;这次全部捋清楚做备忘&#xff0c;有需要的小伙伴欢迎收藏起来哦&#xff01; 查、增、改、删一应俱全&#xff0c;非常详细&#xff01; 目录 一、查看 查看第2行 查看第2行到第3行 查看第1行、…

移动SEO:如何针对任何设备优化您的网站

您快速进行 Google 搜索并阅读一堆结果。然后&#xff0c;您会发现一些网站具有您正在寻找的答案。 但是你从SERP中选择的第一个&#xff0c;也是最有前途的网站&#xff0c;在你最喜欢的移动设备上无法正常工作。 所以&#xff0c;你关闭它&#xff0c;看看下一个网站是否有…

【Linux驱动】pinctrl 和 gpio子系统(一)—— pinctrl 节点解析,引入gpio子系统

裸机开发时&#xff0c;如果要点亮一个 LED&#xff0c;我们要做如下内容&#xff1a; 初始化时钟设置引脚复用为哪个功能&#xff0c;配置引脚的电气属性设置引脚的 IO 方向、初始值 有了设备树以后&#xff0c;我们可以通过 pinctrl 和 gpio 子系统来配置上述内容。 pinct…

基于深度学习的森林火焰烟雾检测系统(含UI界面,yolov8、Python代码,数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8 yolov8主要包含以下几种创新&#xff1a;         1. 添加注意力机制&#xff08;SE、CBAM等&#xff09;         2. 修改可变形卷积&#xff08;DySnake-主干c…

听GPT 讲Rust源代码--src/tools(18)

File: rust/src/tools/rust-analyzer/crates/ide-ssr/src/from_comment.rs 在Rust源代码中的from_comment.rs文件位于Rust分析器&#xff08;rust-analyzer&#xff09;工具的ide-ssr库中&#xff0c;它的作用是将注释转换为Rust代码。 具体来说&#xff0c;该文件实现了从注…

Django(二)

1.django框架 1.1 安装 pip install django3.21.2 命令行 创建项目 cd 指定目录 django-admin startproject 项目名mysite ├── manage.py [项目的管理工具] └── mysite├── __init__.py├── settings.py 【配置文件&#xff0c;只有一部分…

基于SpringBoot的考研专业课程管理系统 JAVA简易版

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高校教师管理模块2.4 考研专业模块2.5 考研政策模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 考研高校表3.2.2 高校教师表3.2.3 考研专业表3.2.4 考研政策表 四、系统展示五、核…

Docker命令集

一、常用命令: run run 从映像创建并运行新容器 $ docker run -it -v $(pwd):/home/zhangsan --name ohos ubuntu:20.04说明&#xff1a;命令表示创建一个名为ohos&#xff0c;系统镜像为ubuntu 20.04的容器&#xff1b;这个容器运行在交互模式下&#xff0c;并且将当前目录…

Mybatis Flex 常见用法

文章目录 Mybatis Flex 常见用法一、枚举二、自动填充2.1 方式一&#xff1a;Table 配置2.2 方式二&#xff1a;Column 配置 三、分页3.1 分页统一接口3.2 实现分页接口3.3 使用 四、关联查询4.1 RelationOneToOne&#xff1a;一对一4.1.1 单向关联4.1.2 双向关联 4.2 Relation…

在laravel 项目中 composer.json 中 autoload 配置是什么作用

在 Laravel 项目中&#xff0c;composer.json 文件是一个重要的文件&#xff0c;它用于定义项目依赖以及一些 Composer 的配置。其中 autoload 是一个键&#xff08;key&#xff09;&#xff0c;其下定义了如何自动加载 PHP 类库。 autoload 的作用是告诉 Composer 和 PHP 解释…

【krita】实时绘画 入门到精通 海报+电商+装修+修复手部

安装插件 首先打开comfyUI&#xff0c;再打开krita&#xff0c;出现问题提示&#xff0c; 打开 cd custom_nodes 输入命令 安装控件 git clone https://github.com/Acly/comfyui-tooling-nodes.git krita基础设置 设置模型 设置lora &#xff08;可设置lora强度 增加更多…

华纳云:怎么用python实现进程,线程和协程

在Python中&#xff0c;可以使用multiprocessing模块来创建进程&#xff0c;使用threading模块来创建线程&#xff0c;以及使用asyncio模块来创建协程。以下是简单的示例代码演示如何使用Python实现进程、线程和协程&#xff1a; 进程&#xff08;multiprocessing&#xff09;…

网站使用https认证

随着网络的普及和依赖程度的增加&#xff0c;网站安全性问题也日益凸显。为了确保用户和网站之间的数据传输安全&#xff0c;采用HTTPS认证已经变得至关重要。 1.数据安全是首要任务 在互联网上&#xff0c;信息传输是网站运作的基础。然而&#xff0c;未加密的传输容易受到中…

嵌入式中的基本定时器

学习目标 理解基本定时器的作用掌握定时器开发流程掌握基本定时器中断处理的操作流程掌握AHB和APB时钟查询方式理解周期,分频系数,周期计数,分频计数。掌握调试策略学习内容 基本定时器 只能用于定时计时操作,没有输出引脚通道的定时器,在GD32中, TIMER5和TIMER6为基本…

电子科大软件测试~第三次作业

第三次作业 第一题 采用JUnit软件测试框架进行测试程序编程&#xff0c;实现对下面java程序进行单元测试&#xff0c;找出其中缺陷。然后修改缺陷&#xff0c;直到通过单元测试&#xff0c;给出测试程序脚本和运行结果界面。 public class getMax {public int get_max(int x…

读取导入的excel表格内容,插入到表格,同时做去重,j前端通过js实现模糊查询

1.导入的excel模版 2.点击导入&#xff0c;显示excel导入弹窗 3.点击选择文件&#xff0c;会调用本地文件夹里面的excel文件 4.选中文件&#xff0c;点击 导入 html部分 <a-button type"primary" click"onImportXls">导入</a-button><…

初识Python之Networkx模块

初识Python之Networkx模块 文章目录 初识Python之Networkx模块简介安装Networkx导入模块、查看版本信息一些基本操作创建Graph添加边&#xff08;节点&#xff09;获取Graph的基本信息Graph的基本绘图 简单应用案例使用内置的Graph数据创建一个无向图创建一个有向图在计算机网络…

leetCode算法—14. 最长公共前缀

14.编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 难度&#xff1a;简单 * 示例 1&#xff1a; 输入&#xff1a;strs [“flower”,“flow”,“flight”] 输出&#xff1a;“fl” 示例 2&#xff1a; 输入&#xff1a…

LeetCode239. Sliding Window Maximum

文章目录 一、题目二、题解 一、题目 You are given an array of integers nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window m…