restTemplate 工具类

怎甘沉沦 提交于 2019-11-29 08:05:11

比自己封装的http工具靠谱,毕竟feign和ribbon也用这个,没有那么多需要考虑的地方,apollo也基于restTemplate封装了一个工具类。默认用的是HttpURLConnection。和okhttp比起来也差不了多少,本人在本地测了一下


import org.springframework.http.*;
import org.springframework.util.CollectionUtils;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import java.util.Map;

/**
 * @author liyhu
 * @date 2019年09月06日
 */
public class RestTemplateUtil {
    /**
     * 实际执行请求的template
     */
    private static RestTemplate restTemplate=new RestTemplate();

    /**
     * json请求
     * @param url
     * @param entity
     * @param cls
     * @param <T>
     * @return
     */
    public static <T>T post(String url, Object entity, Class<T> cls){
        HttpEntity<Object> request = new HttpEntity<>(entity);
        return executePost(url,request,cls);
    }

    /**
     * 表单请求
     * @param url
     * @param params
     * @param cls
     * @param <T>
     * @return
     */
    public static <T>T formPost(String url, MultiValueMap<String, Object> params, Class<T> cls){
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        HttpEntity<Object> request = new HttpEntity<>(params,headers);
        return executePost(url,request,cls);
    }

    /**
     * post 请求
     * @param url
     * @param request
     * @param cls
     * @param <T>
     * @return
     */
    private static <T>T executePost(String url,HttpEntity<Object> request, Class<T> cls){
        ResponseEntity<T> exchange = restTemplate.exchange(url, HttpMethod.POST, request, cls);
        return exchange.getBody();
    }

    /**
     * get 请求
     * @param url
     * @param params
     * @param cls
     * @param <T>
     * @return
     */
    public static  <T>T get(String url, Map<String,Object> params, Class<T> cls){
        StringBuilder urlBuiler=new StringBuilder(url);
        urlBuiler.append("?");
        if(!CollectionUtils.isEmpty(params)){
            for (Map.Entry<String, Object> entry : params.entrySet()) {
                urlBuiler.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
            }
        }
        return restTemplate.getForObject(urlBuiler.toString(), cls);
    }


}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!