范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

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

  在项目开发中经常会遇到调用第三方接口的情况,比如说调用第三方的天气预报接口。  1、准备工作:
  在项目的工具包下导入HttpClientUtil这个工具类,或者也可以使用Spring框架的restTemplate来调用,上面有调用接口的方法【分为Get和Post方式的有参和无参调用】:  package com.njsc.credit.util;   import java.io.IOException; import java.net.URI; import java.util.ArrayList; import java.util.List; import java.util.Map;   import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URIBuilder; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils;   public class HttpClientUtil {    /**   * 带参数的get请求   * @param url   * @param param   * @return String   */  public static String doGet(String url, Map param) {   // 创建Httpclient对象   CloseableHttpClient httpclient = HttpClients.createDefault();     String resultString = "";   CloseableHttpResponse response = null;   try {    // 创建uri    URIBuilder builder = new URIBuilder(url);    if (param != null) {     for (String key : param.keySet()) {      builder.addParameter(key, param.get(key));     }    }    URI uri = builder.build();    // 创建http GET请求    HttpGet httpGet = new HttpGet(uri);    // 执行请求    response = httpclient.execute(httpGet);    // 判断返回状态是否为200    if (response.getStatusLine().getStatusCode() == 200) {     resultString = EntityUtils.toString(response.getEntity(), "UTF-8");    }   } catch (Exception e) {    e.printStackTrace();   } finally {    try {     if (response != null) {      response.close();     }     httpclient.close();    } catch (IOException e) {     e.printStackTrace();    }   }   return resultString;  }    /**   * 不带参数的get请求   * @param url   * @return String   */  public static String doGet(String url) {   return doGet(url, null);  }    /**   * 带参数的post请求   * @param url   * @param param   * @return String   */  public static String doPost(String url, Map param) {   // 创建Httpclient对象   CloseableHttpClient httpClient = HttpClients.createDefault();   CloseableHttpResponse response = null;   String resultString = "";   try {    // 创建Http Post请求    HttpPost httpPost = new HttpPost(url);    // 创建参数列表    if (param != null) {     List paramList = new ArrayList<>();     for (String key : param.keySet()) {      paramList.add(new BasicNameValuePair(key, param.get(key)));     }     // 模拟表单     UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);     httpPost.setEntity(entity);    }    // 执行http请求    response = httpClient.execute(httpPost);    resultString = EntityUtils.toString(response.getEntity(), "utf-8");   } catch (Exception e) {    e.printStackTrace();   } finally {    try {     response.close();    } catch (IOException e) {     e.printStackTrace();    }   }   return resultString;  }    /**   * 不带参数的post请求   * @param url   * @return String   */  public static String doPost(String url) {   return doPost(url, null);  }    /**   * 传送json类型的post请求   * @param url   * @param json   * @return String   */  public static String doPostJson(String url, String json) {   // 创建Httpclient对象   CloseableHttpClient httpClient = HttpClients.createDefault();   CloseableHttpResponse response = null;   String resultString = "";   try {    // 创建Http Post请求    HttpPost httpPost = new HttpPost(url);    // 创建请求内容    StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);    httpPost.setEntity(entity);    // 执行http请求    response = httpClient.execute(httpPost);    resultString = EntityUtils.toString(response.getEntity(), "utf-8");   } catch (Exception e) {    e.printStackTrace();   } finally {    try {     response.close();    } catch (IOException e) {     e.printStackTrace();    }   }   return resultString;  } } 2、创建url和访问key 以及参数等:
  代码如下:  /**  * 聚合接口校验身份证  * @param idCard  * @param realName  * @return boolean  */ public boolean identityCheck(String idCard, String realName){  logger.info("-----------------调用聚合数据 身份证验证API BEGIN--------------->");  String key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";  String url = "http://op.juhe.cn/idcard/query" + "?key=" + key + "&idcard=" + idCard + "&realname=" + realName;  logger.info("请求url:" + url);  boolean match = false; //是否匹配  try {   String result = HttpClientUtil.doGet(url);   System.out.println("请求结果:" + result);   IdentityCheckResult identityCheckResult = JsonUtils.parse(result, IdentityCheckResult.class);   IdentityCheck identityCheck = JsonUtils.parse(result, "result", IdentityCheck.class);   logger.info(identityCheckResult);   logger.info(identityCheck.toString());   if(identityCheckResult.correct() && identityCheck.getRes() == 1){    match = true;   }  } catch (Exception e) {   e.printStackTrace();  }  logger.info("<-----------------调用聚合数据 身份证验证API END---------------");  return match; } 3、请求这个第三方接口:
  使用HttpClientUtil工具类中的doGet方法来请求URL,得到结果,现在大多数是一个json字符串,类型为String。  4、根据接口返回数据格式来解析数据:
  可以看到,返回参数有六个,最新 Java 面试题分享你看下,所以在项目中新建一个bean,包含以上六个字段,用来接住返回数据,如下:
  因为接口返回的数据是一个json的字符串,类型实际上是一个String字符串,要解析数据,用工具类JsonUtils的parse方法将字符串转换为Java对象,JsonUtils的代码如下:  package com.eqianxian.commons.utils.json;   import java.util.List; import java.util.Map;   import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.PropertyFilter; import com.alibaba.fastjson.serializer.SerializerFeature;   /**  * 在系统中统一使用这个,以方便将来切换不同的JSON生成工具  *   * @author KelvinZ  *   */ public class JsonUtils {  public static final int TYPE_FASTJSON = 0;  public static final int TYPE_GSON = 1;    /**   * 
   * 对象转化为json字符串   *    * @param obj 待转化对象   * @return 代表该对象的Json字符串   */  public static final String toJson(final Object obj) {   return JSON.toJSONString(obj);   // return gson.toJson(obj);  }    /**   * 
   * 对象转化为json字符串   *    * @param obj 待转化对象   * @return 代表该对象的Json字符串   */  public static final String toJson(final Object obj, SerializerFeature... features) {   return JSON.toJSONString(obj, features);   // return gson.toJson(obj);  }    /**   * 对象转化为json字符串并格式化   *    * @param obj   * @param format 是否要格式化   * @return   */  public static final String toJson(final Object obj, final boolean format) {   return JSON.toJSONString(obj, format);  }    /**   * 对象对指定字段进行过滤处理,生成json字符串   *    * @param obj   * @param fields 过滤处理字段   * @param ignore true做忽略处理,false做包含处理   * @param features json特征,为null忽略   * @return   */  public static final String toJson(final Object obj, final String[] fields, final boolean ignore,    SerializerFeature... features) {   if (fields == null || fields.length < 1) {    return toJson(obj);   }   if (features == null)    features = new SerializerFeature[] { SerializerFeature.QuoteFieldNames };   return JSON.toJSONString(obj, new PropertyFilter() {    @Override    public boolean apply(Object object, String name, Object value) {     for (int i = 0; i < fields.length; i++) {      if (name.equals(fields[i])) {       return !ignore;      }     }     return ignore;    }   }, features);  }    /**   * 
   * 解析json字符串中某路径的值   *    * @param json   * @param path   * @return   */  @SuppressWarnings("unchecked")  public static final  E parse(final String json, final String path) {   String[] keys = path.split(",");   JSONObject obj = JSON.parseObject(json);   for (int i = 0; i < keys.length - 1; i++) {    obj = obj.getJSONObject(keys[i]);   }   return (E) obj.get(keys[keys.length - 1]);  }    /**   * 
   * json字符串解析为对象   *    * @param json 代表一个对象的Json字符串   * @param clazz 指定目标对象的类型,即返回对象的类型   * @return 从json字符串解析出来的对象   */  public static final  T parse(final String json, final Class clazz) {   return JSON.parseObject(json, clazz);  }    /**   * 
   * json字符串解析为对象   *    * @param json json字符串   * @param path 逗号分隔的json层次结构   * @param clazz 目标类   */  public static final  T parse(final String json, final String path, final Class clazz) {   String[] keys = path.split(",");   JSONObject obj = JSON.parseObject(json);   for (int i = 0; i < keys.length - 1; i++) {    obj = obj.getJSONObject(keys[i]);   }   String inner = obj.getString(keys[keys.length - 1]);   return parse(inner, clazz);  }    /**   * 将制定的对象经过字段过滤处理后,解析成为json集合   *    * @param obj   * @param fields   * @param ignore   * @param clazz   * @param features   * @return   */  public static final  List parseArray(final Object obj, final String[] fields, boolean ignore,    final Class clazz, final SerializerFeature... features) {   String json = toJson(obj, fields, ignore, features);   return parseArray(json, clazz);  }    /**   * 
   * 从json字符串中解析出一个对象的集合,被解析字符串要求是合法的集合类型   * (形如:["k1":"v1","k2":"v2",..."kn":"vn"])   *    * @param json - [key-value-pair...]   * @param clazz   * @return   */  public static final  List parseArray(final String json, final Class clazz) {   return JSON.parseArray(json, clazz);  }    /**   * 
   * 从json字符串中按照路径寻找,并解析出一个对象的集合,例如:   * 类Person有一个属性name,要从以下json中解析出其集合:   * {   *  "page_info":{   *   "items":{   *    "item":[{"name":"KelvinZ"},{"name":"Jobs"},...{"name":"Gates"}]   *  }   * }   * 使用方法:parseArray(json, "page_info,items,item", Person.class),   * 将根据指定路径,正确的解析出所需集合,排除外层干扰   *    * @param json json字符串   * @param path 逗号分隔的json层次结构   * @param clazz 目标类   * @return   */  public static final  List parseArray(final String json, final String path, final Class clazz) {   String[] keys = path.split(",");   JSONObject obj = JSON.parseObject(json);   for (int i = 0; i < keys.length - 1; i++) {    obj = obj.getJSONObject(keys[i]);   }   String inner = obj.getString(keys[keys.length - 1]);   List ret = parseArray(inner, clazz);   return ret;  }    /**   * 
   * 有些json的常见格式错误这里可以处理,以便给后续的方法处理   * 常见错误:使用了" 或者 "{ 或者 }",腾讯的页面中常见这种格式   *    * @param invalidJson 包含非法格式的json字符串   * @return   */  public static final String correctJson(final String invalidJson) {   String content = invalidJson.replace(""", """).replace(""{", "{").replace("}"", "}");   return content;  }    /**   * 格式化Json   *    * @param json   * @return   */  public static final String formatJson(String json) {   Map<?, ?> map = (Map<?, ?>) JSON.parse(json);   return JSON.toJSONString(map, true);  }    /**   * 获取json串中的子json   *    * @param json   * @param path   * @return   */  public static final String getSubJson(String json, String path) {   String[] keys = path.split(",");   JSONObject obj = JSON.parseObject(json);   for (int i = 0; i < keys.length - 1; i++) {    obj = obj.getJSONObject(keys[i]);    System.out.println(obj.toJSONString());   }   return obj != null ? obj.getString(keys[keys.length - 1]) : null;  }   }

从欠债6亿的ampampquot失信人员ampampquot到直播带货一哥,罗永浩1年还债4亿的真相当过老师,办过网站,开过学习,拍过电影,做过手机,现在在直播带货,偶尔上个脱口秀之类的综艺节目。罗永浩做每件事都会折腾出很大的动静,但到最后也都偃旗息鼓。有的人说他是个理想主义者,爱尔眼科陈邦深谙资本之道的外行人,退伍军人变身为千亿首富退伍军人陈邦,为了生计,揣着三万元前往上海谋生,在此期间,尝试了多个行业,做过器材代理,搞过文化传播,甚至涉足过房地产业,都没有赚到钱。偶然间,他受邻居启发,采取院中院的形式和公立三次创业失败,亏掉北京一套房,爱美之心成就市值13亿更美丽,更健康的新氧APP一经出世,就受到众多爱美人士的追捧。这个变美软件,历经波折才出现在世人眼中,它的创始人金星,可谓是九死一难才成功研发出了这款备受欢迎的软件。金星曾在多家企文具大王陈湖雄连续高考3年败北,靠两元笔,成就身家百亿陈湖雄,从小成绩就不好,次次班级倒数,高考参加了三次都落榜了。与学习无缘的他外出打工,17岁进入文具行业,天南海北跑业务,为了多卖一份文具,天不亮就起床,即使半夜三更,只要客户一个李子柒遭捧杀,断更80天亏掉3个亿,复出之路还有多远?美食短视频创作者李子柒,在海内外,拥有数千万粉丝。她的视频只要发布就会吸引大批网友观看,凭借着古色古香的风格,深受海内外网友的喜爱。李子柒向海外网友展示了中华文化的魅力,为文化传播6合1功能一应俱全,远胜苹果ThinkPad的扩展坞attachimg现在越来越多的笔记本平板学着苹果往轻薄便携方向发展了,机身设计越来越简便Orico的这款产品用来扩展笔记本电脑功能的底座,通过接口和插槽,它可以连接多种外部设备,如U盘移动硬盘光驱自主研发芯片祝福!谷歌pixel6官方宣布手机终于到货了感谢大家观看阅读,希望大家多多支持我。时间已经到了21年的下半年。最近,出现了很多新产品,但是大多数都属于核心变更发布的迭代版本,并且没有太多新想法。即使是所谓的十三香iphone继华为之后,小米也缺少芯片,小米高管透露红米手机缺乏芯片难产感谢大家观看阅读,希望大家多多支持我,我们都知道,华为的手机正处于最困难的时刻。在巨大的压力下,华为自主研发的麒麟芯片成为了一件杰作,麒麟芯片的库存已经见底。据估计,剩下的不多了。打造父子的全功能阵地能屈能伸能充电的乐歌E5升降桌体验分享随着娃一天一天长大,从去年开始,我们就考虑并着手改造娃的房间。去年十一之后给娃整了一套新家具,虽然L型书桌已经足够大,但是相比较我之间规划的父子学习娱乐全功能书桌还少了放置电脑的科政客卸任来华捞金,西方退休领导人成香饽饽?奥巴马靠握手赚千万不同于我国,以美国为代表的西方国家领导人和政客,往往会在卸任之后选择重回大众视野。而他们重回大众视野的方法也都多种多样,要么前往其他国家出席各种论坛,要么进行艺术创作乃至成为一名演还记得2017年攀枝花计划建设轨道交通吗?攀枝花市轨道交通线网规划开始公示啦!攀枝花市轨道交通线网将如何规划呢?往下看攀枝花市轨道交通线网规划范围为攀枝花市城市总体规划(20112030)划定的中心城区范围,总面积约120
曝三星S22只用骁龙?前辈机皇闻声沦为白菜机跌至感人价11月8日,多家媒体爆料称,三星内部员工SuperRoader透露,GalaxyS22系列将放弃使用自研芯片,所有机型将搭载高通处理器。对于手机行业来说,这是一个爆炸性的消息。三星特斯拉头号劲敌Rivian上市今年最大规模IPO,第一大股东亚马逊市值跻身全球十大汽车制造商。作者赵健编辑白鑫北京时间11月10日晚,北美电动汽车厂商Rivian在纳斯达克挂牌上市,发行价为78美元,高于此前的发行价区间7274美元,此次IPO总都说龙芯快追上intel,年销100万颗了,为何我们却很少见到众所周知,所有的国产CPU中,龙芯应该是最为出名,也是大家了解最多的。也许有人说会那华为麒麟呢?但麒麟芯片是手机芯片,叫SoC更合适,它不是CPU,一般只有电脑用的芯片,才叫CPU中兴,追不上小米与人们平时给小米定位的手机公司不同,发展七年,小米已经完成了业务生态链的搭建与完善,而中兴被投资者抱怨感觉不到科技的力量。文丨BT财经游璃10月25日,中兴通讯公布2021年度三季解决k8sMysqlCluster无故重启问题前言使用bitpoke的mysqloperator作为k8s的mysql服务,使用的版本v0。4。0,github地址httpsgithub。combitpokemysqloperMySQL面试题InnoDB引擎为什么推荐使用自增ID作为主键?回答MySQLInnoDB引擎底层数据结构是B树,所谓的索引其实就是一棵B树,一个表有多少个索引就会有多少颗B树,MySQL中的数据都是按顺序保存在B树叶子节点上的。MySQL在底iPhoneX垮了吗?有人如下评论2021年,iPhoneX真的很拉垮了。1,A11仿生处理器,虽然基本是855Plus水平,但是发热量不小。2,内存只有3G,杀后台是家常便饭,一天会看见微信小地球无数答案出炉,马斯克是否卖掉10的特斯拉股票?稍早之前特斯拉创办人ElonMusk在社群平台上举办投票,主题为是否要售出我持股的10,最终吸引了351万用户参加,并且其中有高达57。9支持卖掉股票。一直以来,Musk都很擅长制新款诺基亚E71曝光!全键盘设计吸睛,6000mAh大电池只是亮点之一诺基亚手机曾经可以说是家喻户晓的品牌,但如今的局面大家也是有目共睹。很多用户对诺基亚抱有的希望还是很大的,如果诺基亚重振旗鼓,好好做一次手机,大家觉得还有机会扳回一局吗?近日,诺基36万奖金池!面向全球高校人工智能大赛火热举行马上消费喊你来挑战由马上消费金融(以下简称马上消费)主办的2021天马杯全球高校科技创新大赛正在如火如荼进行中。本届大赛由马上消费主办,主题为敢为所AI,无惧未来,自9月28日正式启动以来,已收到近华为,小米,请把百倍变焦功能,拍鸟操作方法,样片发给用户?最近华为P50发布,让人,眼花缭乱的指标,就是200倍望远功能。请问,这个200倍变焦作用是什么?1。供摄影爱好者打鸟?怎么打?手持还是脚架,还是稳定器?2。是不是提供该手机200