RestTemplate工具类

感觉RestTemplate用起来比较麻烦,于是自己简单封装了个工具类。
本人没啥技术含量,若有问题请见谅。

        <dependency>
            <groupId>com.squareup.okhttp3groupId>
            <artifactId>okhttpartifactId>
            <version>3.11.0version>
        dependency>

通用返回类参考前文。


/**
 * RestTemplet工具类
 */
public class RestTemplateUtil {

    private static final RestTemplate REST_TEMPLATE
            = new RestTemplate(new OkHttp3ClientHttpRequestFactory());

    private RestTemplateUtil() {}

    /**
     * @Author CaoXiaoDong
     * @Description 通用POST请求
     * @Date 2020/6/8 下午1:05
     * @param url 请求路径
     * @param responseType 预期返回类型
     * @return  T
    */
    public static <T> T post(String url,
                             Class<T> responseType) {
        return commonRequest(url, HttpMethod.POST, HttpEntity.EMPTY, null, responseType);
    }

    /**
     * @Author CaoXiaoDong
     * @Description 通用POST请求
     * @Date 2020/6/8 下午1:06
     * @param url 请求路径
     * @param requestParams 请求参数
     * @param responseType 预期返回类型
     * @return T
    */
    public static <T> T post(String url,
                             Map<String, Object> requestParams,
                             Class<T> responseType) {
        return commonRequest(url, HttpMethod.POST, HttpEntity.EMPTY, requestParams, responseType);
    }

    /**
     * @Author CaoXiaoDong
     * @Description 通用POST请求
     * @Date 2020/6/8 下午1:06
     * @param url 请求路径
     * @param requestBody 请求体
     * @param responseType 预期返回类型
     * @return T
    */
    public static <T, K> T post(String url,
                                K requestBody,
                                Class<T> responseType) {
        return post(url, requestBody, null, responseType);
    }

    /**
     * @Author CaoXiaoDong
     * @Description 通用POST请求
     * @Date 2020/6/8 下午1:06
     * @param url 请求路径
     * @param requestHeader 请求头
     * @param responseType 预期返回类型
     * @return T
    */
    public static <T> T post(String url,
                             HttpHeaders requestHeader,
                             Class<T> responseType) {
        return post(url, requestHeader, null, responseType);
    }

    /**
     * @Author CaoXiaoDong
     * @Description 通用POST请求
     * @Date 2020/6/8 下午1:07
     * @param url 请求路径
     * @param requestEntity 请求实体
     * @param responseType 预期返回类型
     * @return T
    */
    public static <T, K> T post(String url,
                                HttpEntity<K> requestEntity,
                                Class<T> responseType) {
        return post(url, requestEntity, null, responseType);
    }

    /**
     * @Author CaoXiaoDong
     * @Description 通用POST请求
     * @Date 2020/6/8 下午1:07
     * @param url 请求路径
     * @param requestBody 请求体
     * @param requestParams 请求参数
     * @param responseType 预期返回类型
     * @return T
    */
    public static <T, K> T post(String url,
                                K requestBody,
                                Map<String, Object> requestParams,
                                Class<T> responseType) {
        return post(url, getHttpEntity(requestBody, null), requestParams, responseType);
    }

    /**
     * @Author CaoXiaoDong
     * @Description 通用POST请求
     * @Date 2020/6/8 下午1:07
     * @param url 请求路径
     * @param requestHeader 请求头
     * @param requestParams 请求参数
     * @param responseType 预期返回类型
     * @return T
    */
    public static <T> T post(String url,
                             HttpHeaders requestHeader,
                             Map<String, Object> requestParams,
                             Class<T> responseType) {
        return post(url, getHttpEntity(null, requestHeader), requestParams, responseType);
    }

    /**
     * @Author CaoXiaoDong
     * @Description 通用POST请求
     * @Date 2020/6/8 下午1:07
     * @param url 请求路径
     * @param requestEntity 请求实体
     * @param requestParams 请求参数
     * @param responseType 预期返回类型
     * @return T
    */
    public static <T, K> T post(String url,
                                HttpEntity<K> requestEntity,
                                Map<String, Object> requestParams,
                                Class<T> responseType) {
        return commonRequest(url, HttpMethod.POST, requestEntity, requestParams, responseType);
    }

    /**
     * @Author CaoXiaoDong
     * @Description 通用GET请求
     * @Date 2020/6/8 下午1:07
     * @param url 请求路径
     * @param responseType 预期返回类型
     * @return T
    */
    public static <T> T get(String url,
                            Class<T> responseType) {
        return commonRequest(url, HttpMethod.GET, HttpEntity.EMPTY, null, responseType);
    }

    /**
     * @Author CaoXiaoDong
     * @Description 通用GET请求
     * @Date 2020/6/8 下午1:07
     * @param url 请求路径
     * @param requestParams 请求参数
     * @param responseType 预期返回类型
     * @return T
    */
    public static <T> T get(String url,
                            Map<String, Object> requestParams,
                            Class<T> responseType) {
        return commonRequest(url, HttpMethod.GET, HttpEntity.EMPTY, requestParams, responseType);
    }

    /**
     * @Author CaoXiaoDong
     * @Description 通用GET请求
     * @Date 2020/6/8 下午1:08
     * @param url 请求路径
     * @param requestBody 请求体
     * @param responseType 预期返回类型
     * @return T
    */
    public static <T, K> T get(String url,
                               K requestBody,
                               Class<T> responseType) {
        return get(url, requestBody, null, responseType);
    }

    /**
     * @Author CaoXiaoDong
     * @Description 通用GET请求
     * @Date 2020/6/8 下午1:08
     * @param url 请求路径
     * @param requestHeader 请求头
     * @param responseType 预期返回类型
     * @return T
    */
    public static <T> T get(String url,
                            HttpHeaders requestHeader,
                            Class<T> responseType) {
        return get(url, requestHeader, null, responseType);
    }

    /**
     * @Author CaoXiaoDong
     * @Description 通用GET请求
     * @Date 2020/6/8 下午1:08
     * @param url 请求路径
     * @param requestEntity 请求实体
     * @param responseType 预期返回类型
     * @return T
    */
    public static <T, K> T get(String url,
                               HttpEntity<K> requestEntity,
                               Class<T> responseType) {
        return get(url, requestEntity, null, responseType);
    }

    /**
     * @Author CaoXiaoDong
     * @Description 通用GET请求
     * @Date 2020/6/8 下午1:08
     * @param url 请求路径
     * @param requestBody 请求体
     * @param requestParams 请求参数
     * @param responseType 预期返回类型
     * @return T
    */
    public static <T, K> T get(String url,
                               K requestBody,
                               Map<String, Object> requestParams,
                               Class<T> responseType) {
        return get(url, getHttpEntity(requestBody, null), requestParams, responseType);
    }

    /**
     * @Author CaoXiaoDong
     * @Description 通用GET请求
     * @Date 2020/6/8 下午1:08
     * @param url 请求路径
     * @param requestHeader 请求头
     * @param requestParams 请求参数
     * @param responseType 预期返回类型
     * @return T
    */
    public static <T> T get(String url,
                            HttpHeaders requestHeader,
                            Map<String, Object> requestParams,
                            Class<T> responseType) {
        return get(url, getHttpEntity(null, requestHeader), requestParams, responseType);
    }

    /**
     * @Author CaoXiaoDong
     * @Description 通用GET请求
     * @Date 2020/6/8 下午1:08
     * @param url 请求路径
     * @param requestEntity 请求实体
     * @param requestParams 请求参数
     * @param responseType 预期返回类型
     * @return T
    */
    public static <T, K> T get(String url,
                               HttpEntity<K> requestEntity,
                               Map<String, Object> requestParams,
                               Class<T> responseType) {
        return commonRequest(url, HttpMethod.GET, requestEntity, requestParams, responseType);
    }

    /**
     * @Author CaoXiaoDong
     * @Description 通用请求
     * @Date 2020/6/8 下午1:08
     * @param url 请求路径
     * @param requestMethod 请求方法
     * @param requestEntity 请求实体
     * @param requestParams 请求参数
     * @param responseType 预期返回类型
     * @return T
    */
    public static <T, K> T commonRequest(String url,
                                         HttpMethod requestMethod,
                                         HttpEntity<K> requestEntity,
                                         Map<String, Object> requestParams,
                                         Class<T> responseType) {
        if (null != requestParams) {
            return REST_TEMPLATE.exchange(
                    splicingUriValues(url, requestParams),
                    requestMethod, requestEntity,
                    responseType,
                    requestParams).getBody();
        } else {
            return REST_TEMPLATE.exchange(
                    url,
                    requestMethod,
                    requestEntity,
                    responseType).getBody();
        }

    }

    /**
     * 拼接url上的参数
     *
     * @param url           请求路径
     * @param requestParams 请求参数
     * @return String
     */
    private static String splicingUriValues(String url, Map<String, Object> requestParams) {
        StringBuilder sb = new StringBuilder();
        sb.append(url).append("?");
        requestParams.forEach((k, v) -> {
            sb.append(k).append("={").append(k).append("}&");
        });
        return sb.deleteCharAt(sb.lastIndexOf("&")).toString();
    }

    /**
     * 获得HttpEntity
     *
     * @param requestBody   请求体
     * @param requestHeader 请求头
     * @return HttpEntity
     */
    private static <T> HttpEntity<T> getHttpEntity(T requestBody, HttpHeaders requestHeader) {
        return new HttpEntity<T>(requestBody, requestHeader);
    }
}

你可能感兴趣的:(RestTemplate工具类)