springboot中基于RestTemplate 类 实现调用第三方API接口【POST版本】

https://blog.csdn.net/Drug_/article/details/135111675
这一篇的升级版

还是先配置文件

package com.init.config;

import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.ssl.TrustStrategy;
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;
import javax.net.ssl.SSLContext;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;

/**
 *  restTemplate配置类
 * @author Json
 */

@Configuration
public class RestTemplateConfig {

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

    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
        factory.setConnectTimeout(15000);
        factory.setReadTimeout(5000);
        return factory;
    }

    public static HttpComponentsClientHttpRequestFactory generateHttpRequestFactory()
            throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException
    {
        TrustStrategy acceptingTrustStrategy = (x509Certificates, authType) -> true;
        SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy).build();
        SSLConnectionSocketFactory connectionSocketFactory = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier());

        HttpClientBuilder httpClientBuilder = HttpClients.custom();
        httpClientBuilder.setSSLSocketFactory(connectionSocketFactory);
        CloseableHttpClient httpClient = httpClientBuilder.build();
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
        factory.setHttpClient(httpClient);
        return factory;
    }
}


工具类

package com.xxx.init.utils;


import com.alibaba.fastjson.JSONObject;
import com.xxx.init.config.RestTemplateConfig;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import java.nio.charset.StandardCharsets;
import java.util.List;


/**
 *
 */
public class HttpUtil {

    /**
     * 调用第三方服务器接口  能用于上传 附件
     *
     * @param url        路由
     * @param jsonObject 参数
     * @return 响应体里的数据
     */
    public static JSONObject doPostFormData(String url, MultiValueMap<String, Object> jsonObject) throws Exception {
        RestTemplate restTemplate = new RestTemplate(RestTemplateConfig.generateHttpRequestFactory());
        //此处加编码格式转换
        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
        HttpHeaders httpHeaders = new HttpHeaders();

        httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
        //   httpHeaders.setContentType(org.springframework.http.MediaType.APPLICATION_JSON_UTF8);
        //    httpHeaders.put("Authorization",stringList);
        HttpEntity httpEntity = new HttpEntity(jsonObject, httpHeaders);
        //访问第三方服务器
        ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
        return JSONObject.parseObject(exchange.getBody(), JSONObject.class);
    }

    /**
     * 调用第三方服务器接口  能用于上传 附件
     *
     * @param url         路由
     * @param jsonObject  参数
     * @param httpHeaders 请求头
     * @return 响应体里的数据
     */
    public static JSONObject doPostFormData(String url, MultiValueMap<String, Object> jsonObject, HttpHeaders httpHeaders) throws Exception {
        RestTemplate restTemplate = new RestTemplate(RestTemplateConfig.generateHttpRequestFactory());
        //此处加编码格式转换
        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));

        httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
        HttpEntity httpEntity = new HttpEntity(jsonObject, httpHeaders);
        //访问第三方服务器
        ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
        return JSONObject.parseObject(exchange.getBody(), JSONObject.class);
    }


    /**
     * 调用第三方服务器接口  能用于上传 附件
     *
     * @param url        路由
     * @param jsonObject 参数
     * @return 返回相应所有参数
     */
    public static ResponseEntity<String> doPostFormDataResponse(String url, MultiValueMap<String, Object> jsonObject) throws Exception {
        RestTemplate restTemplate = new RestTemplate(RestTemplateConfig.generateHttpRequestFactory());
        //此处加编码格式转换
        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
        HttpHeaders httpHeaders = new HttpHeaders();

        httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
        //   httpHeaders.setContentType(org.springframework.http.MediaType.APPLICATION_JSON_UTF8);
        //    httpHeaders.put("Authorization",stringList);
        HttpEntity httpEntity = new HttpEntity(jsonObject, httpHeaders);
        //访问第三方服务器
        return restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
    }

    /**
     * 调用第三方服务器接口  get
     *
     * @param url         路由
     * @param httpHeaders 请求头
     * @return 返回相应所有参数
     */
    public static ResponseEntity<String> doGet(String url, HttpHeaders httpHeaders) throws Exception {
        RestTemplate restTemplate = new RestTemplate(RestTemplateConfig.generateHttpRequestFactory());
        //此处加编码格式转换
        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));

        // 设置请求头
        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity httpEntity = new HttpEntity(httpHeaders);
        // 发送 GET 请求
        return restTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class);

    }

    /**
     * 调用第三方服务器接口  get
     *
     * @param url         路由
     * @param httpHeaders 请求头
     * @return 返回响应体body的数据
     */
    public static JSONObject doGetBody(String url, HttpHeaders httpHeaders) throws Exception {
        ResponseEntity<String> responseEntity = doGet(url, httpHeaders);
        return JSONObject.parseObject(responseEntity.getBody(), JSONObject.class);
    }

    /**
     * 调用第三方服务器接口  没有附件上传的那种
     *
     * @param url        路由
     * @param jsonObject 参数
     * @param stringList 头部参数
     * @return
     */
    public static JSONObject doPostJson(String url, JSONObject jsonObject, List<String> stringList) throws Exception {
        RestTemplate restTemplate = new RestTemplate(RestTemplateConfig.generateHttpRequestFactory());
        //此处加编码格式转换
        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(org.springframework.http.MediaType.APPLICATION_JSON_UTF8);
        httpHeaders.put("Authorization", stringList);
        HttpEntity httpEntity = new HttpEntity(jsonObject, httpHeaders);
        //访问第三方服务器
        ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
        return JSONObject.parseObject(exchange.getBody(), JSONObject.class);
    }

    public static JSONObject doPostJson(String url, JSONObject jsonObject) throws Exception {
        return doPostJson(url, jsonObject, null);
    }

}


下面是 丰富版地址 有兴趣 可以去看下
https://blog.csdn.net/Drug_/article/details/139465887

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Json____

您的鼓励是我创作的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值