欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring服务间HTTP调用工具封装 RestTempalate

程序员文章站 2024-02-04 20:09:40
...

服务间的Http请求,可以用apache的HttpClient,OkHttp,这些都是需要我们手动回收资源,使用起来如果实在spring框架中,则有更优的选择,即:RestTemplate来实现服务间的通讯调用。
RestTemplate提供了常见的post,get等请求。下面是利用RestTemplate来封装Http请求工具类。
代码部分:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;
import java.util.Map;

@Service
public class RestTemplateService {
    private final static Logger LOGGER = LoggerFactory.getLogger(RestTemplateService .class);
    @Resource
    public RestTemplate restTemplate;

    /**
     * @Description Post方式调用外部接口
     * @param serverUrl-接口地址
     * @param param-json格式的接口入参
     */
    @Override
    public String restTemplatePost(String serverUrl, String param) {
        try {
            LOGGER.info("调用第三方接口serverUrl={},param={}", serverUrl, param);
            return restTemplate.postForObject(serverUrl, param, String.class);
        } catch (Exception e) {
            LOGGER.error("调用第三方接口serverUrl={},param={}出错:", serverUrl, param, e);
            throw new RuntimeException(e);
        }
    }


    /**
     * @Description Get方式调用外部接口
     * @param serverUrl-接口地址
     * @param map-接口入参
     */
    @Override
    public String restTemplateGet(String serverUrl, Map<String, Object> map) {
        try {
            serverUrl = getServerUrl(serverUrl, map);
            LOGGER.info("调用第三方接口serverUrl={}", serverUrl);
            return restTemplate.getForObject(serverUrl, String.class);
        } catch (Exception e) {
            LOGGER.error("调用第三方接口serverUrl={}出错:", serverUrl, e);
            throw new RuntimeException(e);
        }
    }


    /**
     * @Description get请求拼接参数
     */
    private String getServerUrl(String serverUrl, Map<String, Object> map) {
        if (null == map) {
            return serverUrl;
        }
        StringBuilder sb = new StringBuilder();
        sb.append(serverUrl).append("?");
        map.forEach(
                (k, v) -> sb.append(k).append("=").append(v).append("&")
        );
        sb.deleteCharAt(sb.length() - 1);
        return sb.toString();
    }
}