使用RestTemplate 进行远程接口调用工具类

程序开发中,经常碰到需要远程接口调用的业务场景,一般的get请求直接使用Hutool工具类就很方便,但是Hutool的post请求有时候出现调用失败的问题。

博主调试微信公众号的相关接口使用hutool就一直报错,我还以为是自己的参数不符合微信要求呢,结果换成自己的工具类调用腾讯,立刻就通了。

所以这里把自己封装的工具类展示出来,以供参考或借鉴。

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

/**
 * restTemplate 远程访问工具类
 *
 * @author gbx
 * @since 2021-02-26 14:36
 */
public class RestClientUtils {


    /**
     * 使用restTemplate发送post请求
     *
     * @param restTemplate 请求工具
     * @param uri          请求路径
     * @param token        访问令牌
     * @param jsonObject   请求参数
     * @param message      请求功能详情说明
     * @return 响应结果
     */
    public static String sendPostString(RestTemplate restTemplate, String uri, String token, JSONObject jsonObject, String message) {
        String body;
        try {
            HttpEntity<String> formEntity = getFormEntity(jsonObject, token);
            body = restTemplate.postForEntity(uri, formEntity, String.class).getBody();
        } catch (Exception e) {
            throw new RuntimeException("调用上游服务器失败:" + message, e);
        }
        return body;
    }

    /**
     * 获取POST请求的请求体对象
     *
     * @param jsonObject 封装请求参数信息的实体
     * @param token      接口访问令牌
     * @return 处理结果
     */
    public static HttpEntity<String> getFormEntity(JSONObject jsonObject, String token) {
        HttpHeaders headers = new HttpHeaders();
        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
        headers.setContentType(type);
        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
        if (StringUtils.isNotBlank(token)) {
            headers.add("token", token);
        }

        HttpEntity<String> formEntity;
        if (jsonObject != null) {
            formEntity = new HttpEntity<>(jsonObject.toString(), headers);
        } else {
            formEntity = new HttpEntity<>(headers);
        }
        return formEntity;
    }
}

PS: 工具类中生成调用对象的时候,如果存在token,以约定的实际token key名为准,比如博主这里key就叫 token,所以直接加在header里,你如果叫 Authorization ,那你就在header中添加这个key。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值