RestTemplate工具类

RestTemplate

  1. 配置
@Configuration
public class RestTemplateConfiguration {

    @Bean
    public SimpleClientHttpRequestFactory httpClientFactory() {
        SimpleClientHttpRequestFactory httpRequestFactory = new SimpleClientHttpRequestFactory();
        httpRequestFactory.setReadTimeout(5000);//单位为ms
        httpRequestFactory.setConnectTimeout(5000);//单位为ms
        return httpRequestFactory;
    }

    @Bean
    public RestTemplate restTemplate(){
        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
        requestFactory.setConnectTimeout(3000);
        requestFactory.setReadTimeout(5000);
        RestTemplate restTemplate = new RestTemplate(requestFactory);
        //消息编码都设置为utf-8
        List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
        for (HttpMessageConverter<?> converter : messageConverters) {
            if (converter instanceof StringHttpMessageConverter) {
                ((StringHttpMessageConverter) converter).setDefaultCharset(StandardCharsets.UTF_8);
            }
        }
        //静态化处理
        RestTemplateUtils.setRestTemplate(restTemplate);
        return restTemplate;
    }
}
  1. 工具类
public class RestTemplateUtils {

    private static Logger log = LoggerFactory.getLogger(RestTemplateUtils.class);

    private static RestTemplate restTemplate;
    private static final String JPUSH_IDEMPOTENT = "JPUSH:%s:%s";
    private static final int EXPIRE_TIME = 60;//s

    public static void setRestTemplate(RestTemplate restTemplate) {
        RestTemplateUtils.restTemplate = restTemplate;
    }

    public static <T> T get(String url,Class<T> t){
        return execute(url,null,()-> {
            ResponseEntity<T> forEntity = restTemplate.getForEntity(url, t);
            return forEntity.getBody();
        });
    }

    public static <T> T get(String url,Class<T> t,Map<String ,?> params){
        return execute(url,params,()-> {
            ResponseEntity<T> forEntity = restTemplate.getForEntity(url, t, params);
            return forEntity.getBody();
        });
    }

    /**
     * get请求带header
     * @param url url
     * @param t 响应类型
     * @param headersMap headersMap
     * @return 响应
     */
    public static <T> T getWithHeader(String url, Class<T> t, Map<String ,String> headersMap) {
        return execute(url,headersMap,()-> {
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_JSON);
            setHeads(headers, headersMap);

            HttpEntity<MultiValueMap> httpEntity = new HttpEntity<>(null, headers);
            ResponseEntity<T> forEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, t);
            return forEntity.getBody();
        });
    }

    /**
     * post请求带header
     */
    public static <T> T postWithHeader(String url, Class<T> t, LinkedHashMap<String, Object> contentMap, Map<String ,String> headersMap) {
        return execute(url,contentMap,()-> {
            HttpHeaders httpHeaders = new HttpHeaders();
            httpHeaders.setContentType(MediaType.APPLICATION_JSON);
            setHeads(httpHeaders, headersMap);

            HttpEntity<Object> objectHttpEntity = new HttpEntity<>(contentMap, httpHeaders);
            ResponseEntity<T> forEntity = restTemplate.postForEntity(url, objectHttpEntity, t);

            return forEntity.getBody();
        });
    }

    private static void setHeads(HttpHeaders headers, Map<String, String> headersMap) {
        headersMap.forEach(headers::add);
    }

    public static <T> T post(String url, Class<T> t, JSONObject param){
        return execute(url,param,()->{
            HttpHeaders httpHeaders = new HttpHeaders();
            httpHeaders.setContentType(MediaType.APPLICATION_JSON);
            HttpEntity<Object> objectHttpEntity = new HttpEntity<>(param,httpHeaders);
            ResponseEntity<T> forEntity = restTemplate.postForEntity(url, objectHttpEntity, t);
            return forEntity.getBody();
        });
    }

    /**
     * 执行器
     * @param supplier 执行器
     * @param <T>
     * @return
     */
    private static <T> T execute(String url,Object param,Supplier<T> supplier){
        try{
            T t = supplier.get();
            log.info("接口==>{},请求参数==>{},响应结果==>{}",url, JSON.toJSONString(param), JSON.toJSONString(t));
            return t;
        }catch (Exception e){
            log.error("调用接口异常==>"+url+",参数==>"+ JSON.toJSONString(param),e);
            return null;
        }
    }
}
  1. 参数拼接
public static void main(String[] args) {
        String url = "http://www.baidu.com";
        UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url);
        String url2 = builder.queryParam("name", "zgd").build().encode().toString();
        System.out.println("url2 = " + url2);//http://www.baidu.com?name=zgd

        Map<String,Object> param = Maps.newHashMap();
        param.put("name","zzz");
        param.put("age",123);
        param.forEach(builder::queryParam);
        String url3 = builder.build().encode().toString(); //http://www.baidu.com?name=zgd&name=zzz&age=123
        System.out.println("url3 = " + url3);
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值