Springboot使用RestTemplate调用第三方接口的操作代码

 更新时间:2022年12月05日 10:10:29   作者:技术经理老晶  
这篇文章主要介绍了Springboot使用RestTemplate调用第三方接口,我只演示了最常使用的请求方式get、post的简单使用方法,当然RestTemplate的功能还有很多,感兴趣的朋友可以参考RestTemplate源码

前言

工作当中,经常会使用到很多第三方提供的功能或者我们自己家也会提供一些功能给别人使用。
一般都是通过相互调用API接口的形式,来进行业务功能的对接。
这里所讲的API接口,一般是指HTTP(s)形式的请求,遵循RESTful的标准。
传统情况下,在Java代码里面访问restful服务,一般使用Apache的HttpClient,不过此种方法使用起来非常繁琐。
Spring从3.0开始提供了一种非常简单的模板类来进行操作,这就是RestTemplate。

Spring Boot如何使用RestTemplate

1、在项目pom.xml文件中引入web,依赖内容如下:

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

一般项目中都会已有此依赖。

2、封装RestTemplate配置类RestTemplateConfig(一般放在api/conf目录),代码如下:

package com.***.api.conf;

import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {

    @Bean
    public ClientHttpRequestFactory httpRequestFactory() {
        return new HttpComponentsClientHttpRequestFactory(httpClient());
    }

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate(httpRequestFactory());
    }

    @Bean
    public HttpClient httpClient() {
        Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
                .register("http", PlainConnectionSocketFactory.getSocketFactory())
                .register("https", SSLConnectionSocketFactory.getSocketFactory())
                .build();
        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
        connectionManager.setMaxTotal(3000);
        connectionManager.setDefaultMaxPerRoute(1000);

        RequestConfig requestConfig = RequestConfig.custom()
                .setSocketTimeout(3000)
                .setConnectTimeout(3000)
                .setConnectionRequestTimeout(3000)
                .build();

        return HttpClientBuilder.create()
                .setDefaultRequestConfig(requestConfig)
                .setConnectionManager(connectionManager)
                .build();
    }
}

3、使用举例
举例调用第三方的一个API接口(POST),根据手机号码获取用户的个人信息。

	@Override
    public UserInfo isUserHasCalendar(RestTemplate restTemplate, String sMobile) {
        JSONObject postData = new JSONObject();
        postData.put("mobile", sMobile);
        // URL为第三方HTTP接口地址
        String URL = “******”;
        return restTemplate.postForEntity(URL, postData, UserInfo.class).getBody();
    }

再拿对接过的小鹅通API接口,举例。
小鹅通开放API接口文档:
文档地址: https://api-doc.xiaoe-tech.com/
1)调用“获取access_token”接口:
此接口的官方文档:

在这里插入图片描述

请求方式为get,关键代码如下:

 public String getXiaoETongToken(RestTemplate restTemplate) {
        String url = "https://api.xiaoe-tech.com/token?app_id=app******&client_id=xop******&secret_key=******&grant_type=client_******";
        ResponseEntity<JSONObject> results = restTemplate.exchange(url, HttpMethod.GET, null, JSONObject.class);
        Token tokenDto = JSONObject.toJavaObject(results.getBody(), Token.class);
        return tokenDto.getData().getAccess_token();
    }

2)调用“查询单个用户信息”接口
此接口的官方文档:

在这里插入图片描述

请求方式为post,通过user_id获取用户信息的关键代码如下:

public XiaoETongUser getXiaoETongUser(RestTemplate restTemplate, String Token, String userId) {
        XiaoETongUser user = null;
        try {
            String url = "https://api.xiaoe-tech.com/xe.user.info.get/1.0.0";
            JSONObject postData = new JSONObject();
            postData.put("access_token", Token);
            postData.put("user_id", userId);
            Map map = new HashMap();
            String[] list = {"name", "nickname", "wx_union_id", "wx_open_id", "wx_app_open_id", "wx_avatar"};
            map.put("field_list", list);
            postData.put("data", map);
            ResultMap resultMap = restTemplate.postForEntity(url, postData, ResultMap.class).getBody();
            if (resultMap.get("code").equals(0)) {
                String data = JSON.toJSONString(resultMap.get("data"));
                user = JSONObject.parseObject(data, XiaoETongUser.class);
            }
        } catch (RestClientException e) {
            e.printStackTrace();
        }
        return user;
    }

总结

上面,我只演示了最常使用的请求方式get、post的简单使用方法,当然RestTemplate的功能还有很多,比如:请求方式为delete、put等等,我就不一一举例了,感兴趣的可以去看看RestTemplate的源码。

到此这篇关于Springboot使用RestTemplate调用第三方接口的文章就介绍到这了,更多相关RestTemplate调用第三方接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java实现多个文档合并

    Java实现多个文档合并

    这篇文章主要为大家详细介绍了如何使用 Java 实现一个简单且通用的文档合并工具,主要针对文本文件的合并,感兴趣的小伙伴可以参考一下
    2025-03-03
  • JNI语言基本知识

    JNI语言基本知识

    JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。接下来通过本文给大家分享jni 基础知识,感兴趣的朋友一起看看吧
    2017-10-10
  • Mybatis Order by动态参数防注入方式

    Mybatis Order by动态参数防注入方式

    这篇文章主要介绍了Mybatis Order by动态参数防注入方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • JavaEE SpringMVC 请求传参的示例详解

    JavaEE SpringMVC 请求传参的示例详解

    这篇文章详细介绍了SpringMVC中请求参数的传递和接收方式,包括传递单个参数、多个参数、对象参数、数组参数、集合参数以及JSON数据的传递和处理,感兴趣的朋友一起看看吧
    2025-02-02
  • 基于redis setIfAbsent的使用说明

    基于redis setIfAbsent的使用说明

    这篇文章主要介绍了基于redis setIfAbsent的使用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Spring RestTemplate远程调用过程

    Spring RestTemplate远程调用过程

    这篇文章主要介绍了Spring RestTemplate远程调用过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • SpringBoot实现任意位置获取HttpServletRequest对象

    SpringBoot实现任意位置获取HttpServletRequest对象

    这篇文章主要介绍了SpringBoot实现任意位置获取HttpServletRequest对象,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • spring-boot-starter-security的简单使用方式

    spring-boot-starter-security的简单使用方式

    文章介绍了三种使用Spring Boot Security的方法:基于配置文件、基于配置类和基于注解的方式,通过这些方法,可以实现对Web应用的权限控制,确保只有授权用户才能访问特定资源
    2024-11-11
  • java正则表达式如何获取xml文件中指定节点的值

    java正则表达式如何获取xml文件中指定节点的值

    这篇文章主要介绍了java正则表达式如何获取xml文件中指定节点的值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • rocketmq消费负载均衡--push消费详解

    rocketmq消费负载均衡--push消费详解

    这篇文章主要介绍了rocketmq消费负载均衡--push消费详解,本文介绍了DefaultMQPushConsumerImpl消费者,客户端负载均衡相关知识点。,需要的朋友可以参考下
    2019-06-06

最新评论