常用的Spring Boot调用外部接口方式实现数据交互

目录
  • springboot调用外部接口常用的方式
  • 1、使用原始httpClient请求
  • 2、使用RestTemplate请求
    • 1、get请求
    • 2、post请求
    • 3、使用Feign请求
    • 4、小结

springboot调用外部接口常用的方式

在系统开发过程中,免不了要去调用第三方接口,springboot为我们提供了几种调用第三方接口的方法

1、使用原始httpClient请求

<dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.4.1</version>
        </dependency>
public static JSONObject doPost(JSONObject date) {
    String assessToken="";
    CloseableHttpClient client = HttpClients.createDefault();
    // 要调用的接口url
    String url = "http://127.0.0.1:8080 /submit";
    HttpPost post = new HttpPost(url);
    JSONObject jsonObject = null;
    try {
        //创建请求体并添加数据
        StringEntity s = new StringEntity(date.toString());
        //此处相当于在header里头添加请求头等参数
        s.setContentType("application/json");
        s.setContentEncoding("UTF-8");
        post.setEntity(s);
        //此处相当于在Authorization里头添加Bear token参数信息
        post.addHeader("Authorization", "Bearer " +assessToken);
        HttpResponse res = client.execute(post);
        String response1 = EntityUtils.toString(res.getEntity());
        if (res.getStatusLine()
                .getStatusCode() == HttpStatus.SC_OK) {
            // 返回json格式:
            String result = EntityUtils.toString(res.getEntity());
            jsonObject = JSONObject.parseObject(result);
        }
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    return jsonObject;
}

2、使用RestTemplate请求

1、get请求

/**
** 入参 请求的url、响应体类型
*/
RestTemplate restTemplate=new RestTemplate();
    UriComponents
            uriComponents= UriComponentsBuilder.fromUriString("http://127.0.0.1:8080/user?name={name}")
            .build()
            .expand("jpl")
            .encode();
    URI uri=uriComponents.toUri();
    String body = restTemplate.getForEntity(uri, String.class).getBody();
/**
** 入参 请求的url、响应体类型、请求体的参数
*/
RestTemplate restTemplate=new RestTemplate();
        Map params=new HashMap<>();
        params.put("name","dada"); //
        ResponseEntity responseEntity = restTemplate.getForEntity("http://127.0.0.1:8080/user?name={name}", String.class, params);

2、post请求

public String submit(String documentId){
    String assessToken="";
    RestTemplate restTemplate = new RestTemplate();
    //创建请求头
    HttpHeaders httpHeaders = new HttpHeaders();
    //此处相当于在Authorization里头添加Bear token参数信息
    httpHeaders.add(HttpHeaders.AUTHORIZATION, "Bearer " + assessToken);
    //此处相当于在header里头添加content-type等参数
    httpHeaders.add(HttpHeaders.CONTENT_TYPE,"application/json");
    Map<String, Object> map = (Map<String, Object>) new HashMap<>().put("documentId", JSONObject.parse(documentId));
    String jsonStr = JSON.toJSONString(map);
    //创建请求体并添加数据
    HttpEntity<Map> httpEntity = new HttpEntity<Map>(map, httpHeaders);
    String url = "http://127.0.0.1:8080/submit";
    ResponseEntity<String> forEntity = restTemplate.postForEntity(url,httpEntity,String.class);//此处三个参数分别是请求地址、请求体以及返回参数类型
    return forEntity.toString();
}

3、使用Feign请求

fegin常见咋微服务中使用,这里就不过多介绍

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
    <version>1.2.2.RELEASE</version>
</dependency>

简单介绍一下如果使用feign遇到需要添加请求头等信息时,遇到重写feign的apply方法

@Configuration
public class FeignConfig implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate requestTemplate) {
        //添加token
        requestTemplate.header("token", "");
    }
}

4、小结

RestTemplate、HTTPClient 和 Feign 都是 Java 中用于发送 HTTP 请求的工具,它们都可以用于构建 HTTPRestful API。以下是它们的优缺点:

RESTTemplate

优点:

RestTemplate 简单易用,支持自定义配置,可以更好地满足业务需求。

RestTemplate 可以处理 HTTP 请求和响应,实现对 HTTP 请求和响应的拦截、代理、拦截等功能。

缺点:

RestTemplate 的功能较为复杂,需要手动实现请求体、请求头、响应体、响应头等自定义配置,因此需要一定的编程经验和技能。

RestTemplate 默认情况下使用 Apache HTTP 库,因此在处理 HTTP 请求时,可能对某些业务场景不太友好,需要手动配置。

HTTPClient

优点:

HTTPClient 简单易用,支持多种 HTTP 库,可以更好地满足不同的业务需求。

HTTPClient 可以处理 HTTP 请求和响应,实现对 HTTP 请求和响应的拦截、代理、拦截等功能。

缺点:

HTTPClient 默认情况下使用 Apache HTTP 库,因此在处理 HTTP 请求时,可能对某些业务场景不太友好,需要手动配置。

HTTPClient 的性能可能不如 RestTemplate 。

Feign

优点:

Feign 是 Java 中的 HTTP客户端,可以支持多种 HTTP 库,可以更好地满足不同的业务需求。

Feign 可以实现自定义的请求拦截、响应拦截、请求体拦截、响应体拦截等功能,因此可以更好地满足业务需求。

Feign 内置了丰富的验证和认证功能,可以支持自定义的验证和认证规则。

缺点:

Feign 的功能较为复杂,需要手动实现请求拦截、响应拦截、请求体拦截、响应体拦截、验证和认证等功能,因此需要一定的编程经验

到此这篇关于常用的Spring Boot调用外部接口方式实现数据交互的文章就介绍到这了,更多相关Spring Boot调用外部接口内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解SpringBoot 调用外部接口的三种方式

    目录 1.简介 2.方式一:使用原始httpClient请求 3.方式二:使用RestTemplate方法 4.方式三:使用Feign进行消费 1.简介 SpringBoot不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程.在Spring-Boot项目开发中,存在着本模块的代码需要访问外面模块接口,或外部url链接的需求, 比如在apaas开发过程中需要封装接口在接口中调用apaas提供的接口(像发起流程接口submit等等)下面也是

  • springboot运行时新增/更新外部接口的实现方法

    最近有个需求:需要让现有springboot项目可以加载外部的jar包实现新增.更新接口逻辑.本着拿来主义的思维网上找了半天没有找到类似的东西,唯一有点相似的还是spring-loaded但是这个东西据我网上了解有如下缺点: 1.使用java agent启动,个人倾向于直接使用pom依赖的方式 2.不支持新增字段,新增方法,估计也不支持mybatis的xml加载那些吧,没了解过 3.只适合在开发环境IDE中使用,没法生产使用 无奈之下,我只能自己实现一个了,我需要实现的功能如下 1.加载外部扩展

  • Spring-Boot 访问外部接口的方案总结

    目录 一.简介 二.Spring-Boot项目中访问外部接口 2.1 方案一 采用原生的Http请求 2.2 方案二 采用Feign进行消费 2.3.方案三 采用RestTemplate方法 参考文献 一.简介 在Spring-Boot项目开发中,存在着本模块的代码需要访问外面模块接口,或外部url链接的需求,针对这一需求目前存在着三种解决方案,下面将对这三种方案进行整理和说明. 二.Spring-Boot项目中访问外部接口 2.1 方案一 采用原生的Http请求 在代码中采用原生的http请求

  • 常用的Spring Boot调用外部接口方式实现数据交互

    目录 springboot调用外部接口常用的方式 1.使用原始httpClient请求 2.使用RestTemplate请求 1.get请求 2.post请求 3.使用Feign请求 4.小结 springboot调用外部接口常用的方式 在系统开发过程中,免不了要去调用第三方接口,springboot为我们提供了几种调用第三方接口的方法 1.使用原始httpClient请求 <dependency> <groupId>org.apache.httpcomponents</gr

  • Spring boot调用Oracle存储过程的两种方式及完整代码

    前言 因工作需要将公司SSH项目改为Spingboot项目,将项目中部分需要调用存储过程的部分用entityManagerFactory.unwrap(SessionFactory.class).openSession()来获取Session实现后发现项目访问数据库超过十次就会挂掉,原因是Springboot连接池数量默认为10,猜测是每次访问数据库后连接未释放导致的,手动关闭session后问题解决. 解决问题的过程中又发现了另外两种调用方式: 直接用EntityManager的createS

  • spring boot linux启动方式详解

    前台启动 java -jar XXX.jar 后台启动 java -jar xxx.jar & 区别:前台启动ctrl+c就会关闭程序,后台启动ctrl+c不会关闭程序 制定控制台的标准输出 java -jar xxx.jar > catalina.out 2>&1 & catalina.out将标准输出指向制定文件catalina.out 2>&1 输出所有的日志文件 & 后台启动  脚本启动 #!/bin/sh #功能简介:启动上层目录下的ja

  • Spring Boot调用 Shell 脚本实现看门狗功能

    需要实现看门狗功能,定时检测另外一个程序是否在运行,使用 crontab 仅可以实现检测程序是否正在运行,无法做到扩展,如:手动重启.程序升级(如果只需要实现自动升级功能可以使用 inotify)等功能:最后决定使用 Spring Boot 调用 Shell 脚本来实现 一.脚本 1.1 启动脚本 #!/bin/bash ps -ef | grep "demo-app-0.0.1-SNAPSHOT.jar" | grep -v "grep" if [ "$

  • Spring Boot 利用 XML 方式整合 MyBatis

    目录 一.前言 二.整合过程 新建 Spring Boot 项目 添加 pom 依赖 准备数据库 pojo 层 dao 层 service 层 controller 层 入口程序配置 网页测试 总结 一.前言 上一篇文章中我们已经Spring Boot 利用注解方式整合 MyBatis,今天我们就来看看,如何利用 XML 文件的方式来将两者整合起来! 下图是整个整合过程,接下来开始整合: 二.整合过程 最终项目结构如下图所示: 新建 Spring Boot 项目 新建一个 Spring Boot

  • Spring Boot 利用注解方式整合 MyBatis

    目录 前言 整合过程 新建 Spring Boot 项目 添加 pom 依赖 准备数据库 pojo 层 dao 层 service 层 controller 层 入口程序配置 网页测试 总结 前言 目前而言,国内大家使用最多的持久层框架可能还是 MyBatis 吧,那既然如此,更强大的 Spring Boot 遇上炽手可热的 MyBatis,又会擦出什么样的火花呢? 那本文就来看看,如何利用 SpringBoot 来整合 Mybatis. 如下图是总结的整合过程的大概流程,那接下来我们就来开始具

  • Spring Boot 使用 SSE 方式向前端推送数据详解

    目录 前言 服务端 SSE工具类 在Controller层创建 SSEController.java 前端代码 前言 SSE简单的来说就是服务器主动向前端推送数据的一种技术,它是单向的,也就是说前端是不能向服务器发送数据的.SSE适用于消息推送,监控等只需要服务器推送数据的场景中,下面是使用Spring Boot 来实现一个简单的模拟向前端推动进度数据,前端页面接受后展示进度条. 服务端 在Spring Boot中使用时需要注意,最好使用Spring Web 提供的SseEmitter这个类来进

  • Spring Boot项目维护全局json数据代码实例

    这篇文章主要介绍了Spring Boot项目维护全局json数据代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 概述 过去 我们在每一个方法中处理前端发过来的请求,需要自己构造请求数据,然后通过spring 提供的@ResponseBody 强制转为JSON数据吗,实际上出现了很多重复的代码,我么亦可以通过构造一个 工具类,实现只关注需要改变的数据. 下面给出这个工具类. public class JsonMsg { private i

  • spring boot udp或者tcp接收数据的实例详解

    下面用的是 springboot内置integration依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-integration</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot<

  • Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题

    目录 前言 架构设计 代码实现 测试 总结 前言 最近在做阅读类的业务,需要记录用户的PV,UV: 项目状况:前期尝试业务阶段: 特点: 快速实现(不需要做太重,满足初期推广运营即可)快速投入市场去运营 收集用户的原始数据,三要素: 谁在什么时间阅读哪篇文章 提到PV,UV脑海中首先浮现特点: 需要考虑性能(每个客户每打开一篇文章进行记录)允许数据有较小误差(少部分数据丢失) 架构设计 架构图: 时序图 记录基础数据MySQL表结构 CREATE TABLE `zh_article_count`

随机推荐