spring中自带的RESTFUL接口调用方式,RestTemplate 取消https(SSL)验证

构造RestTemplate 

    private RestTemplate restTemplate = new RestTemplate();
    
    public RestTemplate getRestTemplate() {
        // 如果中文乱码可以使用此方法修改restTemplate的编码(默认ISO_8859_1)
        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(Charset.forName("GB2312")));
        return restTemplate;
    }


// 以下为跳过SSL验证构造的RestTemplate

    /**
     * 构造RestTemplate
     *
     * @return
     * @throws Exception
     */
    public static RestTemplate getRestTemplate() throws Exception {
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
        // 超时
        factory.setConnectionRequestTimeout(5000);
        factory.setConnectTimeout(5000);
        factory.setReadTimeout(5000);
        SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(createIgnoreVerifySSL(),
                // 指定TLS版本
                null,
                // 指定算法
                null,
                // 取消域名验证
                new HostnameVerifier() {
                    @Override
                    public boolean verify(String string, SSLSession ssls) {
                        return true;
                    }
                });
        CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
        factory.setHttpClient(httpClient);
        RestTemplate restTemplate = new RestTemplate(factory);
        // 解决中文乱码问题
        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
        return restTemplate;
    }


    /**
     * 跳过证书效验的sslcontext
     *
     * @return
     * @throws Exception
     */
    private static SSLContext createIgnoreVerifySSL() throws Exception {
        SSLContext sc = SSLContext.getInstance("TLS");

        // 实现一个X509TrustManager接口,用于绕过验证,不用修改里面的方法
        X509TrustManager trustManager = new X509TrustManager() {
            @Override
            public void checkClientTrusted(java.security.cert.X509Certificate[] paramArrayOfX509Certificate,
                                           String paramString) throws CertificateException {
            }

            @Override
            public void checkServerTrusted(java.security.cert.X509Certificate[] paramArrayOfX509Certificate,
                                           String paramString) throws CertificateException {
            }

            @Override
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return null;
            }
        };
        sc.init(null, new TrustManager[] { trustManager }, null);
        return sc;
    }

POST

// 表单提交方式
		HttpHeaders headers = new HttpHeaders();
		// 请勿轻易改变此提交方式,大部分的情况下,提交方式都是表单提交
		headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
		// 封装参数,千万不要替换为Map与HashMap,否则参数无法传递
		MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
		params.add("id", "1");
		params.add("name", "test");

		HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(params, headers);
		ResponseEntity<String> responseEntity = getRestTemplate().postForEntity(baseurl + "/user", entity, String.class);
		System.out.println(responseEntity.getBody());
 
		// json提交方式
        HttpHeaders headers = new HttpHeaders();
        headers.add("Token","token");
        // 请勿轻易改变此提交方式,大部分的情况下,提交方式都是表单提交
        headers.setContentType(MediaType.APPLICATION_JSON);

        //设置body参数,并转成json字符串
        Map<String,String> param=new HashMap<>();
        param.put("id", "123");

        String content = JsonUtils.toJsonStr(param);

        HttpEntity<String> httpEntity = new HttpEntity<>(content, headers);

        String response = restTemplate.postForObject(BASE_URL + "/getCargoAmount", httpEntity, String.class);

        System.out.println(response);

GET

方法1
String result = getRestTemplate().getForObject(baseurl + config.getAppId() + "/person/"
                + entity.get("guid")
                + "?appId=" + config.getAppId() 
                + "&token=" + token 
                , String.class);

方法2

 // 请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        if(headerList!=null)headerList.forEach(p -> headers.add(p.get("key"), p.get("val")));
        // 请求参数
        MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
        params.add("sign", "123");

        HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<>(null, headers);
        String url = apiHealthCheck.getUrlPath();
        if (!params.isEmpty()) {
            String queryString = params.entrySet().stream()
                .map(it -> it.getValue().stream()
                    .map(value -> it.getKey() + "=" + value)
                    .collect(Collectors.joining("&"))
                ).collect(Collectors.joining("&"));
            if (!StringUtils.isEmpty(queryString)) {
                url += (url.contains("?") ? "&" : "?") + queryString;
            }
        }
ResponseEntity<String> responseEntity = getRestTemplate()
                .apply(apiHealthCheck.getMaxConnectionSeconds()).exchange(url,
                    HttpMethod.GET, httpEntity, String.class);

PUT

// 请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
// 请求体
MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
params.add("id","123");
params.add("personGuid", entity.get("personGuid"));// 若为空, 则清空该设备所有的授权记录
HttpEntity<MultiValueMap<String, String>> httpEntity= new HttpEntity<>(params, headers);
ResponseEntity<String> responseEntity  = getRestTemplate().exchange(baseurl + config.getAppId() + "/device", HttpMethod.PUT, httpEntity, String.class);

DELETE

// 请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
// 请求体
MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
params.add("id","123");
params.add("personGuid", entity.get("personGuid"));// 若为空, 则清空该设备所有的授权记录
HttpEntity<MultiValueMap<String, String>> httpEntity= new HttpEntity<>(params, headers);
ResponseEntity<String> responseEntity  = getRestTemplate().exchange(baseurl + config.getAppId() + "/device", HttpMethod.DELETE, httpEntity, String.class);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值