Demo直接拿来用兼容https的ampampquotres
关于Demo直接拿来用本系列文章为大家提供常用小工具的Demo
侧重点并非代码如何实现,因为大家都能写
目的是为大家节省开发时间,力求拿来直接就能用
用最快的时间完成开发任务
应用场景
在应用内部需要调用外部的api时使用
同时兼容https类型请求
(正常在调用https类型请求时会报以下异常,该工具解决了该问题)
还是老话:方法有很多,效率至上即可。
拿来吧你
源码分为三部分:重写SimpleClientHttpRequestFactory抽象类的prepareConnection方法封装各类型请求测试Demo
大家只需关注第三部分,了解使用方式,前两部分直接复制粘贴即可。
以下为各部分源码,具体说明已写在注释中,应该无需我多言了:
Part1兼容调Https接口AuthormazqDate2020060417:16ParamreturnpublicclassHttpsClientRequestFactoryextendsSimpleClientHttpRequestFactory{OverrideprotectedvoidprepareConnection(HttpURLConnectionconnection,StringhttpMethod){try{if(!(connectioninstanceofHttpsURLConnection)){http协议thrownewRuntimeException(AninstanceofHttpsURLConnectionisexpected);super。prepareConnection(connection,httpMethod);}if(connectioninstanceofHttpsURLConnection){https协议,修改协议版本KeyStoretrustStoreKeyStore。getInstance(KeyStore。getDefaultType());信任任何链接TrustStrategyanyTrustStrategynewTrustStrategy(){OverridepublicbooleanisTrusted(X509Certificate〔〕x509Certificates,Strings)throwsCertificateException{returntrue;}};SSLContextctxSSLContexts。custom()。useTLS()。loadTrustMaterial(trustStore,anyTrustStrategy)。build();((HttpsURLConnection)connection)。setSSLSocketFactory(ctx。getSocketFactory());HttpsURLConnectionhttpsConnection(HttpsURLConnection)connection;super。prepareConnection(httpsConnection,httpMethod);}}catch(Exceptione){e。printStackTrace();}}}
Part2preRestTemplate远程调用工具类prepreauthormazqpreComponentpublicclassRestTemplateUtils{publicstaticRestTemplategeTemplate(){returnnewRestTemplate(newHttpsClientRequestFactory());}GET请求调用方式AuthormazqDate2020060113:47Param〔url,responseType,uriVariables〕returnorg。springframework。http。ResponseEntityTpublicstaticTResponseEntityTgetForEntity(Stringurl,ClassTresponseType,MapString,?uriVariables){returngeTemplate()。getForEntity(url,responseType,uriVariables);}POST请求调用方式AuthormazqDate2020060113:47Param〔url,headers,body,responseType〕returnorg。springframework。http。ResponseEntityTpublicstaticTResponseEntityTpostForEntity(Stringurl,HttpHeadersheaders,ObjectrequestBody,ClassTresponseType){HttpEntityObjectrequestEntitynewHttpEntityObject(requestBody,headers);returngeTemplate()。postForEntity(url,requestEntity,responseType);}PUT请求调用方式AuthormazqDate2020060113:35paramurl请求URLparamheaders请求头参数paramrequestBody请求参数体paramresponseType返回对象类型paramuriVariablesURL中的变量,与Map中的key对应returnResponseEntity响应对象封装类publicstaticTResponseEntityTput(Stringurl,HttpHeadersheaders,ObjectrequestBody,ClassTresponseType,MapString,?uriVariables){HttpEntityObjectrequestEntitynewHttpEntityObject(requestBody,headers);returngeTemplate()。exchange(url,HttpMethod。PUT,requestEntity,responseType,uriVariables);}DELETE请求调用方式AuthormazqDate2020060113:37paramurl请求URLparamheaders请求头参数paramrequestBody请求参数体paramresponseType返回对象类型paramuriVariablesURL中的变量,按顺序依次对应returnResponseEntity响应对象封装类publicstaticTResponseEntityTdelete(Stringurl,HttpHeadersheaders,ObjectrequestBody,ClassTresponseType,Object。。。uriVariables){HttpEntityObjectrequestEntitynewHttpEntityObject(requestBody,headers);returngeTemplate()。exchange(url,HttpMethod。DELETE,requestEntity,responseType,uriVariables);}通用调用方式AuthormazqDate2020060113:37Param〔url,method,requestEntity,responseType,uriVariables〕returnorg。springframework。http。ResponseEntityTpublicstaticTResponseEntityTexchange(Stringurl,HttpMethodmethod,HttpEntitylt;?requestEntity,ClassTresponseType,MapString,?uriVariables){returngeTemplate()。exchange(url,method,requestEntity,responseType,uriVariables);}}
Part3MultiValueMapString,StringmapnewLinkedMultiValueMapString,String();map。add(username,);map。add(password,);HttpHeadersheadersnewHttpHeaders();headers。setContentType(MediaType。APPLICATIONFORMURLENCODED);log。info(远程调用传递参数:);log。info(headers:headers);log。info(body:map);ResponseEntityStringresponseEntityRestTemplateUtils。postForEntity(https:。。。。,headers,map,String。class);log。info(远程调用返回结果:responseEntity);
更多内容在公众号:浩说编程。