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

在项目开发中经常会遇到调用第三方接口的情况,比如说调用第三方的天气预报接口。

1、准备工作:

在项目的工具包下导入HttpClientUtil这个工具类,或者也可以使用Spring框架的restTemplate来调用,上面有调用接口的方法【分为Get和Post方式的有参和无参调用】:

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;
 
 /**
  * <pre>
  * 对象转化为json字符串
  * 
  * @param obj 待转化对象
  * @return 代表该对象的Json字符串
  */
 public static final String toJson(final Object obj) {
  return JSON.toJSONString(obj);
  // return gson.toJson(obj);
 }
 
 /**
  * <pre>
  * 对象转化为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);
 }
 
 /**
  * <pre>
  * 解析json字符串中某路径的值
  * 
  * @param json
  * @param path
  * @return
  */
 @SuppressWarnings("unchecked")
 public static final <E> 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]);
 }
 
 /**
  * <pre>
  * json字符串解析为对象
  * 
  * @param json 代表一个对象的Json字符串
  * @param clazz 指定目标对象的类型,即返回对象的类型
  * @return 从json字符串解析出来的对象
  */
 public static final <T> T parse(final String json, final Class<T> clazz) {
  return JSON.parseObject(json, clazz);
 }
 
 /**
  * <pre>
  * json字符串解析为对象
  * 
  * @param json json字符串
  * @param path 逗号分隔的json层次结构
  * @param clazz 目标类
  */
 public static final <T> T parse(final String json, final String path, final Class<T> 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 <T> List<T> parseArray(final Object obj, final String[] fields, boolean ignore,
   final Class<T> clazz, final SerializerFeature... features) {
  String json = toJson(obj, fields, ignore, features);
  return parseArray(json, clazz);
 }
 
 /**
  * <pre>
  * 从json字符串中解析出一个对象的集合,被解析字符串要求是合法的集合类型
  * (形如:["k1":"v1","k2":"v2",..."kn":"vn"])
  * 
  * @param json - [key-value-pair...]
  * @param clazz
  * @return
  */
 public static final <T> List<T> parseArray(final String json, final Class<T> clazz) {
  return JSON.parseArray(json, clazz);
 }
 
 /**
  * <pre>
  * 从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 <T> List<T> parseArray(final String json, final String path, final Class<T> 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<T> ret = parseArray(inner, clazz);
  return ret;
 }
 
 /**
  * <pre>
  * 有些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;
 }
 
}

来源:https://blog.csdn.net/qq_35860138/article/details/82967727

ps:如果您觉文章有用,动动小手点个在看,点个再走吧

-END-

PS:如果觉得我的分享不错,欢迎大家随手点赞、在看。

 关注公众号:Java后端编程,回复下面关键字 


要Java学习完整路线,回复  路线 

缺Java入门视频,回复 视频 

要Java面试经验,回复  面试 

缺Java项目,回复: 项目 

进Java粉丝群: 加群 


PS:如果觉得我的分享不错,欢迎大家随手点赞、在看。

(完)




加我"微信获取一份 最新Java面试题资料

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

请备注:666不然不通过~


最近好文


1、必须推荐的一个后台管理系统

2、无意中发现了一位清华妹子的资料库!

3、Java后端编程读者群正式成立了!

4、一套简单通用的Java后台管理系统,拿来即用

5、36 张图梳理 Intellij IDEA 常用设置



Java 调用第三方接口,实战来了!
最近面试BAT,整理一份面试资料Java面试BAT通关手册,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:关注公众号并回复 java 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ♡

本篇文章来源于微信公众号:Java后端编程

原创文章,作者:software,如若转载,请注明出处:https://www.sldh123.com/1191.html

(0)
上一篇 5月 16, 2022 9:32 上午
下一篇 5月 19, 2022 6:06 上午

相关推荐

发表回复

您的电子邮箱地址不会被公开。