游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

Java调用第三方接口,实战来了

  在项目开发中经常会遇到调用第三方接口的情况,比如说调用第三方的天气预报接口。1、准备工作:
  在项目的工具包下导入HttpClientUtil这个工具类,或者也可以使用Spring框架的restTemplate来调用,上面有调用接口的方法【分为Get和Post方式的有参和无参调用】:packagecom。njsc。credit。util;importjava。io。IOException;importjava。net。URI;importjava。util。ArrayList;importjava。util。List;importjava。util。Map;importorg。apache。http。NameValuePair;importorg。apache。http。client。entity。UrlEncodedFormEntity;importorg。apache。http。client。methods。CloseableHttpResponse;importorg。apache。http。client。methods。HttpGet;importorg。apache。http。client。methods。HttpPost;importorg。apache。http。client。utils。URIBuilder;importorg。apache。http。entity。ContentType;importorg。apache。http。entity。StringEntity;importorg。apache。http。impl。client。CloseableHttpClient;importorg。apache。http。impl。client。HttpClients;importorg。apache。http。message。BasicNameValuePair;importorg。apache。http。util。EntityUtils;publicclassHttpClientUtil{带参数的get请求paramurlparamparamreturnStringpublicstaticStringdoGet(Stringurl,MapString,Stringparam){创建Httpclient对象CloseableHttpClienthttpclientHttpClients。createDefault();StringresultString;CloseableHttpResponseresponsenull;try{创建uriURIBuilderbuildernewURIBuilder(url);if(param!null){for(Stringkey:param。keySet()){builder。addParameter(key,param。get(key));}}URIuribuilder。build();创建httpGET请求HttpGethttpGetnewHttpGet(uri);执行请求responsehttpclient。execute(httpGet);判断返回状态是否为200if(response。getStatusLine()。getStatusCode()200){resultStringEntityUtils。toString(response。getEntity(),UTF8);}}catch(Exceptione){e。printStackTrace();}finally{try{if(response!null){response。close();}httpclient。close();}catch(IOExceptione){e。printStackTrace();}}returnresultString;}不带参数的get请求paramurlreturnStringpublicstaticStringdoGet(Stringurl){returndoGet(url,null);}带参数的post请求paramurlparamparamreturnStringpublicstaticStringdoPost(Stringurl,MapString,Stringparam){创建Httpclient对象CloseableHttpClienthttpClientHttpClients。createDefault();CloseableHttpResponseresponsenull;StringresultString;try{创建HttpPost请求HttpPosthttpPostnewHttpPost(url);创建参数列表if(param!null){ListNameValuePairparamListnewArrayList();for(Stringkey:param。keySet()){paramList。add(newBasicNameValuePair(key,param。get(key)));}模拟表单UrlEncodedFormEntityentitynewUrlEncodedFormEntity(paramList);httpPost。setEntity(entity);}执行http请求responsehttpClient。execute(httpPost);resultStringEntityUtils。toString(response。getEntity(),utf8);}catch(Exceptione){e。printStackTrace();}finally{try{response。close();}catch(IOExceptione){e。printStackTrace();}}returnresultString;}不带参数的post请求paramurlreturnStringpublicstaticStringdoPost(Stringurl){returndoPost(url,null);}传送json类型的post请求paramurlparamjsonreturnStringpublicstaticStringdoPostJson(Stringurl,Stringjson){创建Httpclient对象CloseableHttpClienthttpClientHttpClients。createDefault();CloseableHttpResponseresponsenull;StringresultString;try{创建HttpPost请求HttpPosthttpPostnewHttpPost(url);创建请求内容StringEntityentitynewStringEntity(json,ContentType。APPLICATIONJSON);httpPost。setEntity(entity);执行http请求responsehttpClient。execute(httpPost);resultStringEntityUtils。toString(response。getEntity(),utf8);}catch(Exceptione){e。printStackTrace();}finally{try{response。close();}catch(IOExceptione){e。printStackTrace();}}returnresultString;}}2、创建url和访问key以及参数等:
  代码如下:聚合接口校验身份证paramidCardparamrealNamereturnbooleanpublicbooleanidentityCheck(StringidCard,StringrealName){logger。info(调用聚合数据身份证验证APIBEGIN);StringkeyXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;Stringurlhttp:op。juhe。cnidcardquery?keykeyidcardidCardrealnamerealName;logger。info(请求url:url);booleanmatchfalse;是否匹配try{StringresultHttpClientUtil。doGet(url);System。out。println(请求结果:result);IdentityCheckResultidentityCheckResultJsonUtils。parse(result,IdentityCheckResult。class);IdentityCheckidentityCheckJsonUtils。parse(result,result,IdentityCheck。class);logger。info(identityCheckResult);logger。info(identityCheck。toString());if(identityCheckResult。correct()identityCheck。getRes()1){matchtrue;}}catch(Exceptione){e。printStackTrace();}logger。info(调用聚合数据身份证验证APIEND);returnmatch;}3、请求这个第三方接口:
  使用HttpClientUtil工具类中的doGet方法来请求URL,得到结果,现在大多数是一个json字符串,类型为String。4、根据接口返回数据格式来解析数据:
  可以看到,返回参数有六个,最新Java面试题分享你看下,所以在项目中新建一个bean,包含以上六个字段,用来接住返回数据,如下:
  因为接口返回的数据是一个json的字符串,类型实际上是一个String字符串,要解析数据,用工具类JsonUtils的parse方法将字符串转换为Java对象,JsonUtils的代码如下:packagecom。eqianxian。commons。utils。json;importjava。util。List;importjava。util。Map;importcom。alibaba。fastjson。JSON;importcom。alibaba。fastjson。JSONObject;importcom。alibaba。fastjson。serializer。PropertyFilter;importcom。alibaba。fastjson。serializer。SerializerFeature;在系统中统一使用这个,以方便将来切换不同的JSON生成工具authorKelvinZpublicclassJsonUtils{publicstaticfinalintTYPEFASTJSON0;publicstaticfinalintTYPEGSON1;pre对象转化为json字符串paramobj待转化对象return代表该对象的Json字符串publicstaticfinalStringtoJson(finalObjectobj){returnJSON。toJSONString(obj);returngson。toJson(obj);}pre对象转化为json字符串paramobj待转化对象return代表该对象的Json字符串publicstaticfinalStringtoJson(finalObjectobj,SerializerFeature。。。features){returnJSON。toJSONString(obj,features);returngson。toJson(obj);}对象转化为json字符串并格式化paramobjparamformat是否要格式化returnpublicstaticfinalStringtoJson(finalObjectobj,finalbooleanformat){returnJSON。toJSONString(obj,format);}对象对指定字段进行过滤处理,生成json字符串paramobjparamfields过滤处理字段paramignoretrue做忽略处理,false做包含处理paramfeaturesjson特征,为null忽略returnpublicstaticfinalStringtoJson(finalObjectobj,finalString〔〕fields,finalbooleanignore,SerializerFeature。。。features){if(fieldsnullfields。length1){returntoJson(obj);}if(featuresnull)featuresnewSerializerFeature〔〕{SerializerFeature。QuoteFieldNames};returnJSON。toJSONString(obj,newPropertyFilter(){Overridepublicbooleanapply(Objectobject,Stringname,Objectvalue){for(inti0;ifields。length;i){if(name。equals(fields〔i〕)){return!ignore;}}returnignore;}},features);}pre解析json字符串中某路径的值paramjsonparampathreturnSuppressWarnings(unchecked)publicstaticfinalEEparse(finalStringjson,finalStringpath){String〔〕keyspath。split(,);JSONObjectobjJSON。parseObject(json);for(inti0;ikeys。length1;i){objobj。getJSONObject(keys〔i〕);}return(E)obj。get(keys〔keys。length1〕);}prejson字符串解析为对象paramjson代表一个对象的Json字符串paramclazz指定目标对象的类型,即返回对象的类型return从json字符串解析出来的对象publicstaticfinalTTparse(finalStringjson,finalClassTclazz){returnJSON。parseObject(json,clazz);}prejson字符串解析为对象paramjsonjson字符串parampath逗号分隔的json层次结构paramclazz目标类publicstaticfinalTTparse(finalStringjson,finalStringpath,finalClassTclazz){String〔〕keyspath。split(,);JSONObjectobjJSON。parseObject(json);for(inti0;ikeys。length1;i){objobj。getJSONObject(keys〔i〕);}Stringinnerobj。getString(keys〔keys。length1〕);returnparse(inner,clazz);}将制定的对象经过字段过滤处理后,解析成为json集合paramobjparamfieldsparamignoreparamclazzparamfeaturesreturnpublicstaticfinalTListTparseArray(finalObjectobj,finalString〔〕fields,booleanignore,finalClassTclazz,finalSerializerFeature。。。features){StringjsontoJson(obj,fields,ignore,features);returnparseArray(json,clazz);}pre从json字符串中解析出一个对象的集合,被解析字符串要求是合法的集合类型(形如:〔k1:v1,k2:v2,。。。kn:vn〕)paramjson〔keyvaluepair。。。〕paramclazzreturnpublicstaticfinalTListTparseArray(finalStringjson,finalClassTclazz){returnJSON。parseArray(json,clazz);}pre从json字符串中按照路径寻找,并解析出一个对象的集合,例如:类Person有一个属性name,要从以下json中解析出其集合:{pageinfo:{items:{item:〔{name:KelvinZ},{name:Jobs},。。。{name:Gates}〕}}使用方法:parseArray(json,pageinfo,items,item,Person。class),将根据指定路径,正确的解析出所需集合,排除外层干扰paramjsonjson字符串parampath逗号分隔的json层次结构paramclazz目标类returnpublicstaticfinalTListTparseArray(finalStringjson,finalStringpath,finalClassTclazz){String〔〕keyspath。split(,);JSONObjectobjJSON。parseObject(json);for(inti0;ikeys。length1;i){objobj。getJSONObject(keys〔i〕);}Stringinnerobj。getString(keys〔keys。length1〕);ListTretparseArray(inner,clazz);returnret;}pre有些json的常见格式错误这里可以处理,以便给后续的方法处理常见错误:使用了或者{或者},腾讯的页面中常见这种格式paraminvalidJson包含非法格式的json字符串returnpublicstaticfinalStringcorrectJson(finalStringinvalidJson){StringcontentinvalidJson。replace(,)。replace({,{)。replace(},});returncontent;}格式化JsonparamjsonreturnpublicstaticfinalStringformatJson(Stringjson){Maplt;?,?map(Maplt;?,?)JSON。parse(json);returnJSON。toJSONString(map,true);}获取json串中的子jsonparamjsonparampathreturnpublicstaticfinalStringgetSubJson(Stringjson,Stringpath){String〔〕keyspath。split(,);JSONObjectobjJSON。parseObject(json);for(inti0;ikeys。length1;i){objobj。getJSONObject(keys〔i〕);System。out。println(obj。toJSONString());}returnobj!null?obj。getString(keys〔keys。length1〕):null;}}

充电宝?照明灯?充电器?,爱克斯达BC4轻体验不久前,测评过XTAR(爱克斯达)的充电产品PB2S,其将可更换电池设计应用到充电宝之上,让我印象尤为深刻。这款产品使用到现在,发现一个比较可惜的地方,就是更换下来的电池,由于……酷比魔方iwork1X刷机Remix2。0系统分享【PConline资讯】新机油不知道如何刷机,或者刷机遇到问题,主要是没认真参考刷机教程,这里我把经常会遇到的问题,归纳下;另外刷机会把平板数据清空,若有重要资料提前做好备份。……解读全新名爵ZS中国高端小型SUV标杆能否撬动缤智XRV潜客三年前的广州车展上,名爵ZS完成了全球首秀,而早在其公布设计草图时我们对其的初步判断是:在已经呈现饱和趋势的小型SUV市场,代表着名爵重新定义设计理念(第一代感性力设计)的首款……小米透明电视今天上午看到了各家测评媒体受邀请去小米北京总部体验小米透明电视的视频,产品本身确实是很震撼的,在透明的oled屏幕上还能够比较清晰的显示出色彩丰富的内容。有兴趣的可以去各位数码……乏善可陈的IntelComputex2021新品发布台北Computex历来是最受瞩目的PC业界硬件及技术展会,受到疫情的影响,这次的Computex依然是移师线上举行,开幕第一天的主题演讲来自PC硬件的老大英特尔。英特尔……智能工厂MES系统中,打造制造协同管理平台离不开工业一体机近年来,随着JIT、BTO等新型生产模式的提出,以及客户、市场对产品质量提出更高要求,MES系统作为面向制造企业车间执行层的生产信息化管理系统,成为了制造企业通过信息传递,对从……骁龙888散热短板得以解决,国产巨头推出黑科技,明年正式量产手机散热一直都是令各大厂商都很头疼的问题,从4G时代开始再到现在5G时代,散热技术也随着手机配置的提高而革新,现在最成熟的散热方案其实是VC液冷散热,也是主流旗舰机都标配的一种……十四五来了!智能制造将有哪些改变?十四五规划《建议》公布,指出坚持把发展经济的着力点放在实体经济上,坚定不移建设制造强国、质量强国、网络强国、数字中国。更有权威媒体预测,十四五国家专项规划将成为超级版的中国制造……Crucial英睿达P5固态硬盘2T评测系统盘下依然实力派应该有人和我遇到一样的烦恼,买的笔记本或者台式电脑,在一开始选择的容量或许还够用,但随着成年累月的资料堆积,电脑容量开始慢慢不够用了,尤其是我自从开始剪辑视频后,视频素材就占用……白话NBA太阳艾顿0。9秒绝杀快船,比杜兰特更强的乔治在哪里文大白大家好,我是大白。欢迎来到我的白话频道。今天说一下刚刚结束的太阳和快船的G2比赛,最终这个比赛太阳的艾顿创造了奇迹,在比赛还有0。9秒的情况下,居然直接空接打……无须采取封闭式,高校出入管理,一台人脸识别终端就可以了从目前的新闻来看,国内大部分高校采取的是半封校措施,教职工、食堂工作人员、快递等可以凭借自身证件自由出入学校,学生则是能不出尽量不出,在特殊情况下向老师报备申请才能外出,管控十……本田缤智限量版正式上市,外观更运动,14。08万元起,限量5其实小型SUV在国内需求量非常大,但是一台顶配接近20万的小型SUV,月销万辆,这对于SUV市场来说,就不是一般的表现了,这款车就是本田缤智。实际上,本田将缤智定义为战略车型,……
解密DMi超级混动,亏电油耗仅3。8L百公里的秘诀9月10日,我迪朋友们DMi超级混动技术解析会在河南郑州举行。来自比亚迪的技术专家与媒体人士深入探讨了比亚迪DMi超级混动技术的奥秘。比亚迪参会工程师表示,DMi超级混动技术有……或搭载压燃引擎新款马自达MX5年内发布,增加990S轻量化版日前,据外媒报道,马自达新款MX5将于年内发布。据悉,新车或将增加车身自重仅990kg的990S版轻量化车型。据马自达日本官网显示,现款MX5停产后,将于今年冬季推出新款……路由器带串口!这台高性能4G工业路由器厉害了在物联网应用场景中,经常存在使用路由器基本功能串口转网络数据透传场景。如农业气象监测中的监控摄像头(网口设备)和各类环境传感器(RS485串口设备),为满足此类场景联网需……这里有份企业线上办公入门指南,请注意查收01hr线上办公模式将从软性需求演变硬性配置。若以疫情期为时间中节点,那么在疫情前的远程办公形式则是呈现稳定正态分布趋势的,直至疫情期间保持社交距离居家隔离等特殊时期特殊……2021性价比高的无线耳机,学生平价蓝牙耳机推荐无线耳机这一两年可以说是非常火爆,但是什么牌子的蓝牙耳机好用,除了千元以上的还有没有性价比高的蓝牙耳机呢?很多人在挑选的时候都会犯难,为了帮助大家解决这一难题,这里给大家盘点几……特斯拉ModelY入门价降7万!电动大众福特压力山大本文来源:时代财经作者:廖维7月8日,时代财经从特斯拉中国方面获悉,中国制造ModelY标准续航版正式上线,即日起接受预定。据官方资料,ModelY标准续航版起售价……星期六预计年内有望推出首个虚拟人IP账号e公司讯,星期六(002291)今日在互动平台表示,公司整合了国内顶级的制作团队和IP资源,当下选择了短视频平台孵化相关虚拟人IP,并做了相关制作开发,预计年内有望推出首个虚拟……PayPal在英国推出加密货币服务从周一开始,PayPal的英国客户可以购买、出售和持有比特币、以太坊、比特币现金和莱特币,客户可以使用他们的银行账户、PayPal余额或借记卡,通过PayPal网站和移动应用上……市面折叠屏手机的对决折叠哪家强?2019年年初可以说折叠屏幕风头盖过了5G。也能理解,5G这个东西看不见摸不着,尽管厂商向我们描述的5G世界就是网速更快,万物互联等等,而这一切,需要大量的时间进行基础设施建设……长津湖连创国庆档纪录,电影市场终于回暖了吗?《长津湖》上映7天,目前票房破30亿,预测最终总票房超53亿。毫无疑问,《长津湖》已经成为有史以来国庆档票房成绩最好的一部作品。10月1日到10月6日,国庆档大盘连续六天……利扬芯片A股三方芯片测试龙头增长取决于国内中高端芯片出货量选股理由:营收稳定增长新股上市证券代码:688135评级:A本文分为六部分:一、业务与行业;二、公司治理;三、财务分析;四、核心竞争力及投资逻辑;五、盈利预测及估值……小鸡三级盔蓝牙音箱外形酷酷的,播放音乐震撼你的心灵提到音箱,我个人非常喜欢,经历了过去的收音机、录音机、组合大音箱,到现在的蓝牙小音箱也都有购买存放着。因为我本身对音乐特别热爱,家里也支持我捯饬这些。特别是蓝牙小音箱,估计有1……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网