1.最近在调用第三方API遇到证书验证问题 postman调用和用RestTemplate分别报错如下:
2.经过查询资料 是https,需要安装证书,但是自定义的证书貌似得不到信任,所以报PKIX path building failed 解决办法分别如下:postman解决方法如下:
3.再次用postman调用 就可以了 :
4.用RestTemplate调用 忽略SSL证书验证即可 代码如下:
public static RestTemplate buildRestTemplate() {RestTemplate restTemplate = new RestTemplate();HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();factory.setConnectionRequestTimeout(300000);factory.setConnectTimeout(300000);factory.setReadTimeout(300000);// httpsCloseableHttpClient httpClient = getHttpsClient();factory.setHttpClient(httpClient);restTemplate = new RestTemplate(factory);return restTemplate;}public static CloseableHttpClient getHttpsClient() {CloseableHttpClient httpClient;SSLContext sslContext = null;try {sslContext = SSLContexts.custom().loadTrustMaterial(null, new TrustStrategy() {@Overridepublic boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {return true;}}).build();} catch (NoSuchAlgorithmException e) {e.getStackTrace();} catch (KeyManagementException e) {e.getStackTrace();} catch (KeyStoreException e) {e.getStackTrace();}httpClient = HttpClients.custom().setSSLContext(sslContext).setSSLHostnameVerifier(new NoopHostnameVerifier()).build();return httpClient;}public <T> T post(String url, Object param, Class<T> clazz,RestTemplate restTemplate, Map<String, String> headerMap) {String value = "";if (param instanceof String) {value = (String) param;} else {value = JSONObject.toJSONString(param);}HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.parseMediaType(APPLICATION_JSON_VALUE));if(headerMap!=null){for (String key : headerMap.keySet()) {headers.add(key, headerMap.get(key));}}HttpEntity<String> requestEntity = new HttpEntity<String>(value,headers);ResponseEntity<T> tResponseEntity = restTemplate.postForEntity(url,requestEntity, clazz);return tResponseEntity.getBody();}
5.用RestTemplate调用post方法 代码如下:
package com.longjin.wechat.controller;import com.alibaba.fastjson.JSONObject;import m.utils.RestTemplateUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;import java.util.Map;/*** @Description:* @Author 何志鹏* @Date /6/18 16:00* @Version 1.0*/@RestController@RequestMapping("/api/test")public class test {@Autowiredprivate RestTemplateUtils templateUtils;@PostMapping("get")public JSONObject get() {//条件查询参数Map<String, Object> map = new HashMap<>();map.put("pageindex",1);map.put("pagesize",99999999);Map<String, String> headerMap = new HashMap<>();headerMap.put("Authorization","header内容");JSONObject post = templateUtils.post("调用的第三方url地址", map, JSONObject.class, RestTemplateUtils.buildRestTemplate(),headerMap);System.err.println( post.size());return post;}}
6.调用结果如下:
如果觉得《解决调用第三方API报sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provid》对你有帮助,请点赞、收藏,并留下你的观点哦!