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
    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory){
        return new RestTemplate(factory);
    }

    // 注册ClientHttpRequestFactory实例为bean
    @Bean
    public 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 {


    @Autowired
    private 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对象,并设置URL
        HttpPost 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;
    }
}

结果

未添加数据之前

在这里插入图片描述

添加数据

在这里插入图片描述

添加数据之后

在这里插入图片描述

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

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

相关文章

《数据结构、算法与应用C++语言描述》- 最小赢者树模板的C++实现

赢者树 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_30winnerTree 比赛规则 假定有 n 个选手参加一次网球比赛。比赛规则是“突然死亡法”(sudden-death mode)&#xff1a;一名选手只要输掉一场球&#xff0c;就被淘汰。一对一对…

【Linux 驱动】Linux设备树(四)—— 设备树驱动LED

有了设备树以后&#xff0c;我们可以将寄存器信息保存到设备树&#xff0c;即便是更换了一个设备&#xff0c;我们也无需修改驱动文件&#xff0c;只需要修改设备树文件并重新编译。 下面介绍两种通过设备树驱动 LED 的最简单的方式&#xff0c;这两种方式的主要是设备树中 re…

自营商城与多商户入驻商城功能与开发流程_OctShop

如今互联网以及电子商务的大趋势下&#xff0c;很多企业或商家都意识到自营商城的重要性。当然&#xff0c;要搭建一个属于自己的自营商城并非简单。需要综合考虑众多的因素&#xff0c;如&#xff1a;用户体验、商品管理、在线支付、功能需求、市场分析等等多个方面。如果是自…

dell服务器 R740xd安装windows server 2019过程记录

公司有两台dell服务器型号是R740xd&#xff0c;增加了存储&#xff0c;更新系统到windows server 2019标准版。 查找了网上的系统安装方式&#xff0c;都没有实践成功&#xff0c;做一下工作记录&#xff0c;给大家做参考。 网络搜索到的两种方式&#xff0c;进行安装 &#x…

全都没有问题(二点五)

java 接口默认方法冲突等问题 基础基础基础 子接口覆盖父接口的默认方法 package com.book;interface AA{public abstract void print();public default void ID(){System.out.println("AA");} } interface BB extends AA{ //接口BB继承AAOverridepublic default…

C#线程的定义和使用方法

引言 在C#编程语言中&#xff0c;线程是一种并发执行的机制&#xff0c;允许程序同时执行多个任务。线程的使用使得我们能够利用计算机的多核处理器&#xff0c;实现程序的并行执行&#xff0c;提高系统的性能和响应能力。本文将详细介绍C#中线程的定义和使用方法&#xff0c;涵…

学习体系结构 - AArch64 虚拟化

学习体系结构 - AArch64 虚拟化 Learn the architecture - AArch64 virtualization Version 1.0 借助 Deepl 翻译文档 个人对文档补充的一部分解释&#xff0c; 仅供学习参考 前 3 章为了解内容&#xff0c;引入虚拟化 第 4-7 章为虚拟化比较核心的内容 第 4 章为第二阶段地址…

windows安装、基本使用vim

标题&#xff1a;windows安装、基本使用vim 1.下载并安装GVIM 百度网盘链接 提取码&#xff1a;2apr 进入安装界面&#xff0c;如下&#xff0c;勾选 其它都是默认即可 参考&#xff1b; 2.在powershell中使用vim 参考blog&#xff1a;window10安装vim编辑器 安装好后&…

机器人制作开源方案 | “校园卫士”-智能巡检机器人

作者&#xff1a;程训聪、柳贺凯、赵坤峰、叶智超、高仁伟 单位&#xff1a;黑龙江科技大学 指导老师&#xff1a;邵文冕、李杨 1. 摘要 针对校园巡检需求设计机器人本体结构&#xff0c;借助Arduino作为控制核心的巡检机器人控制系统构建方法研究了巡检机器人在校园环境下的…

数据结构:图解手撕B-树以及B树的优化和索引

文章目录 为什么需要引入B-树&#xff1f;B树是什么&#xff1f;B树的插入分析B树和B*树B树B*树分裂原理 B树的应用 本篇总结的内容是B-树 为什么需要引入B-树&#xff1f; 回忆一下前面的搜索结构&#xff0c;有哈希&#xff0c;红黑树&#xff0c;二分…等很多的搜索结构&a…

Maven仓库上传jar和mvn命令汇总

目录 导入远程仓库 命令结构 命令解释 项目pom 输入执行 本地仓库导入 命令格式 命令解释 Maven命令汇总 mvn 参数 mvn常用命令 web项目相关命令 导入远程仓库 命令结构 mvn deploy:deploy-file -Dfilejar包完整名称 -DgroupIdpom文件中引用的groupId名 -Dartifa…

使用 Node.js 删除文件 - 完整步骤教程

引言 在 Node.js 中处理文件尤其是移除文件&#xff0c;对于维护高效应用程序至关重要。储存和秩序当道的今天&#xff0c;删除不必要或冗余的文件能力显得尤为关键。本文深入探讨你会想要使用这个强大功能的时刻和原因&#xff0c;并通过各种案例展示了这个概念&#xff0c;同…

JavaScript基础(数组+正则表达+字符串)

目录 1.数组 1.1创建数组 1.2字面量创建数组 1.3length函数 1.4遍历数组1 1.5遍历数组2语法糖 1.6增删改查 1push 2pop 3unshift("x",x) 4shift() 5数组的截取 slice() splice() 6concat 7reverse 2.内置对象 2.1data 2.2Math对象 2.3字符串 1c…

2023年12月20日历史上的今天大事件早读

1722年12月20日 康熙皇帝驾崩 1803年12月20日 法国正式将新奥尔良移交给美国 1860年12月20日 南卡罗来纳州宣布脱离美国 1917年12月20日 全俄肃反委员会成立 1928年12月20日 国民党与英国签订中英关税条约 1939年12月20日 德“施佩伯爵”号遭英舰围困自沉 1945年12月20日…

Poi实现复杂Excel导出,理解POI操作Excel思路!!!

前言 对于简单excel报表导出&#xff0c;有很多简单的工具如easypoi&#xff0c;而且现在网上已经有很多工具类整合easypoi使用起来非常方便。但是简单的弊端往往无法适配一些负责场景&#xff0c;而我们实际生产中面临的都是客户自定以的一个负责报表导出&#xff0c;这是利用…

搭建 ElasticSearch 集群环境

安装基础环境 我们用虚拟机创建出3台机器&#xff0c;查看centos版本为7.9 [roots1 ~]# cat /etc/centos-release CentOS Linux release 7.9.2009 (AltArch)下载相关命令 yum -y install vim* yum -y install net-tools yum -y install lsof yum -y install wget yum -y ins…

对GPU进行压力测试

GPU压力测试工具安装指导&#xff08;RHEL8.2&#xff09; - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/443165016 1、下载gpu-burn工具 下载地址&#xff1a;https://github.com/wilicc/gpu-burn 2、上传到系统后安装 # unzip gpu-burn-master.zip # cd gpu-burn-mas…

关于MQ,你了解多少?(干货分享之二)

导语 本文梳理笔者 MQ 知识&#xff0c;从消息中间件的基础知识讲起&#xff0c;在有了基础知识后&#xff0c;对市面上各主流的消息中间件进行详细的解析&#xff0c;包括 RabbitMQ、RocketMQ、Kafka、Pulsar&#xff0c;最后再横向对比这几款主流的消息中间件。本篇是系列文…

Maven——如何快速生成bean的get、set方法,Lombok依赖引入和使用!!!

Lombok依赖引入和使用 1、项目pom.xml文件引入如下依赖&#xff1a;2、引入之后还要在idea中安装对应lombok插件:file–>plugins–>搜索框搜索lombok安装3、重启之后&#xff0c;便可以在实体类bean中使用提供注解快速生成对应的方法了 总结 本文介绍如何快速生成实体bea…