RestTemplat

本文详细介绍了Spring的RestTemplate工具,用于高效地进行HTTP请求。 RestTemplate提供了一系列便捷的方法,如postForEntity、getForEntity等,支持设置连接超时、HTTP头、请求参数等。同时,它可以通过拦截器进行请求拦截。然而,在Spring5中,推荐使用异步的WebClient代替RestTemplate。
摘要由CSDN通过智能技术生成

简介

RestTemplat是Spring3.0开始提供的http请求的工具,提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率,RestTemplate 是一个同步的 Rest API 客户端;

创建RestTemplat

通过SimpleClientHttpRequestFactory工厂统一设置连接超时时间和读超时时间、代理等信息,然后创建RestTemplate的Bean;
还可以通过SimpleClientHttpRequestFactory工厂配置http请求连接数,忽略ssl证书等;

@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory simpleClientHttpRequestFactory) {
        return new RestTemplate(simpleClientHttpRequestFactory);
    }

    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setReadTimeout(10000);//单位为ms
        factory.setConnectTimeout(10000);//单位为ms
        //factory.setProxy(null);//设置代理
        return factory;
    }
}

请求方式和对应的方法

常规请求调用方法

http method对应方法
postpostForEntity和postForObject
getgetForEntity和getForObject
putput
deletedelete
HeadheadForHeaders
optionsoptionsForAllow
optionsoptionsForAllow

通用调用方法

1:exchange:可以自己设置http method、headers、url,传入RequestEntity,返回ResponseEntity
2:execute:通过callback,对请求和返回更好的控制;但是不常用

设置请求参数

JSONObject jsonObject = new JSONObject();
jsonObject.put("payOrderNo", payOrderNo);
jsonObject.put("refundNo", refundNo);
jsonObject.put("refundAmount", refundAmount.multiply(new BigDecimal(100)));
jsonObject.put("refundReason", refundReason);
HttpEntity<JSONObject> httpEntity= new HttpEntity<>(jsonObject);

设置header

 HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
headers.add("X-App-Id", appId);
headers.add("X-Time-Stamp", map.get("X-Time-Stamp"));
 HttpEntity<JSONObject> requestParam = new HttpEntity<>(jsonObject, headers);

请求

//post请求返回ResponseEntity
 ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(url, httpEntity, JSONObject.class);
 //post请求返回指定的类型
JSONObject responseEntity = restTemplate.postForObject(urls, httpEntity, JSONObject.class);
//get请求返回ResponseEntity
ResponseEntity<JSONObject> responseEntity = restTemplate.getForEntity(urls, JSONObject.class);
 //get请求返回指定的类型
JSONObject responseEntity = restTemplate.getForObject(urls, JSONObject.class);

exchange

ResponseEntity<JSONObject> responseEntity = restTemplate.exchange(url,HttpMethod.POST,httpEntity, JSONObject.class);

拦截器配置

首先创建拦截器类并实现ClientHttpRequestInterceptor 接口

@Slf4j
public class HTTPInterceptor implements ClientHttpRequestInterceptor {
    @Override
    public ClientHttpResponse intercept(HttpRequest httpRequest, byte[] bytes, ClientHttpRequestExecution clientHttpRequestExecution) throws IOException {
        log.info("执行拦截器拦截请求{}",httpRequest.getURI());
        return clientHttpRequestExecution.execute(httpRequest,bytes);
    }
}

在RestTemplate创建bean的时候添加拦截器

    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory simpleClientHttpRequestFactory) {
        RestTemplate restTemplate= new RestTemplate(simpleClientHttpRequestFactory);
        List<ClientHttpRequestInterceptor> list=new ArrayList<>();
        list.add(new HTTPInterceptor());
        restTemplate.setInterceptors(list);
        return restTemplate;
    }

这样客户端在发起http请求的时候就会执行拦截器

通过 RestTemplate,我们可以非常方便的进行 Rest API 调用。但是在 Spring 5 中已经不再建议使用 RestTemplate,而是建议使用 WebClient。WebClient 是一个支持异步调用的 Client。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值