java接口调用——RestTemplate

一、RestTemplate是什么

RestTemplate是Spring提供的一种简单便捷的模板类来供我们在代码里访问 http 服务,相较于之前常用的HttpClientRestTemplate是一种更为优雅的调用RESTFul服务的方式。

1.RestTemplate默认是不支持HTTPS请求的

在此有两种解决办法,一是导入证书,二是忽略证书的校验。

忽略证书实例

继承SimpleClientHttpRequestFactory,实现了 ClientHttpRequestFactory接口,我们需要重写其 prepareConnection()方法,在此方法里实现对 HttpURLConnection的重新处理,忽略对证书的校验。创建RestTemplate时使用RestTemplateBuilder来构建,requestFactory()方法用来设置 ClientHttpRequestFactory

public class HttpsClientHttpRequestFactory extends SimpleClientHttpRequestFactory {
    @Override
    protected void prepareConnection(HttpURLConnection connection, String httpMethod) throws IOException {
        try {
            if (connection instanceof HttpsURLConnection) {// https协议,修改协议版本
                KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
                // 信任任何链接,忽略对证书的校验
                TrustStrategy anyTrustStrategy = (x509Certificates, s) -> true;
                //自定义SSLContext
                SSLContext ctx = SSLContexts.custom().loadTrustMaterial(trustStore, anyTrustStrategy).build();
                // ssl问题
                ((HttpsURLConnection) connection).setSSLSocketFactory(ctx.getSocketFactory());
                //解决No subject alternative names matching IP address xxx.xxx.xxx.xxx found问题
                ((HttpsURLConnection) connection).setHostnameVerifier((s, sslSession) -> true);
                HttpsURLConnection httpsConnection = (HttpsURLConnection) connection;
                super.prepareConnection(httpsConnection, httpMethod);
            } else { // http协议
                super.prepareConnection(connection, httpMethod);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

二、创建RestTemplate

1.使用jdk自带的HttpURLConnection作为底层HTTP客户端实现(默认)

也可以用RestTemplateBuilder构造类定义一些参数

2.使用Apache的HttpClient作为HTTP客户端

3.使用OkHttp作为http客户端

4.注入使用

5.最简单的方式直接在代码里new

三、API使用

1.GET请求

get请求参数传入map时会拼接在url后http://httpbin.org/post?name="彭于晏"

2.POST请求

postForObject();postForEntity()

例子

HttpHeaders headers new HttpHeaders();

headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

MultiValueMap<String,Objectparam new LinkedMultiValueMap<>();

param.add("tid",tid);

HttpEntity<MultiValueMap<String,Object>> httpEntity new HttpEntity<>(param,headers);

RestTemplate restTemplate new RestTemplate();

ResponseEntity<Stringoutresponse restTemplate.postForEntity("url",httpEntity,String.class);

3.PUT请求

put();

使用方法与postForEntity()参数基本一致,只是put方法没有返回值

4.DELETE请求

5.EXCHANGE请求

  • <T> ResponseEntity<T> exchange()

允许用户指定请求的方法(get,post,put等) 

6.HEADER、OPTIONS、EXECUTE不常用

  • 22
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值