java对接第三方接口「建议收藏」

java对接第三方接口「建议收藏」1.准备与第三方接口对接的账号配置到了Apollo上面@Value(“${taofake.appId}”) privateStringappId; @Value(“${taofake.url}”) privateStringurl; @Value(“${taofake.appSecret}”) privateStringappSecret;2.准备用于接受接…

大家好,又见面了,我是你们的朋友全栈君。

1.准备与第三方接口对接的账号

配置到了Apollo上面

在这里插入图片描述

    @Value("${taofake.appId}")
	private String appId;
	@Value("${taofake.url}")
	private String url;
	@Value("${taofake.appSecret}")
	private String appSecret;

2.准备用于接受接口返回结果的实体类在这里插入图片描述

3.准备发HTTP请求的工具类

在这里插入图片描述
在这里插入图片描述

http工具类

package cn.zhaocha.common.utils;

import java.io.IOException;
import java.util.Map;

import cn.zhaocha.vo.BaseResponseVo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;

@Slf4j
public class OKHttpUtil { 
   

	private static final Logger logger = LoggerFactory.getLogger(OKHttpUtil.class);

	private static OkHttpClient client = getClient();

	public static OkHttpClient getClient() { 
   
		if (client == null) { 
   
			client = genericClient();// 创建OkHttpClient对象
		}
		return client;
	}

	public static OkHttpClient genericClient() { 
   
		OkHttpClient httpClient = new OkHttpClient.Builder().addInterceptor(new Interceptor() { 
   
			@Override
			public Response intercept(Chain chain) throws IOException { 
   
				Request request = chain.request().newBuilder()
						// .addHeader("Content-Type", "text/html; charset=gb2312")
						// .addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
						// .addHeader("Accept-Encoding", "gzip, deflate")
						// .addHeader("Connection", "keep-alive")
						// .addHeader("Accept", "*/*")
						// .addHeader("User-Agent", "Mozilla/5.0 (Linux; Android 9.0.0; MI 6 Build/OPR1.170623.032; wv) AppleWebKit/537.36 (KHTML, like Gecko)
						// Version/4.0 Chrome/62.0.3202.84 Mobile Safari/537.36/Android/globalscanner/4.00")
						// .addHeader("Accept-Language", "zh-CN,en-US;q=0.9")
						.addHeader("ApiVersion", "1.0")
						// .addHeader("X-Requested-With", "com.globalscanner")
						.build();
				return chain.proceed(request);
			}
		}).build();

		return httpClient;
	}

	public static String postAsync(String urlStr, Map<String, String> paramMap, Callback callback) { 
   
		return postAsync(urlStr, paramMap, callback, null);
	}

	public static String postAsync(String urlStr, Map<String, String> paramMap, Callback callback, Map<String, String> header) { 
   
		Request.Builder oneBuilder = getOneBuilder(urlStr, paramMap, header);
		Request request = oneBuilder.build();
		getClient().newCall(request).enqueue(callback);
		return null;
	}

	private static Request.Builder getOneBuilder(String urlStr, Map<String, String> paramMap, Map<String, String> header) { 
   
		// 创建表单请求体
		FormBody.Builder formBody = new FormBody.Builder();
		for (String key : paramMap.keySet()) { 
   
			formBody.add(key, paramMap.get(key));
		}
		// 创建Request 对象。//传递请求体
		Request.Builder postBuild = new Request.Builder().url(urlStr).post(formBody.build());
		if (header != null && header.size() > 0) { 
   
			for (String key : header.keySet()) { 
   
				postBuild.addHeader(key, header.get(key));
			}
		}
		return postBuild;
	}

	private static Request.Builder getGetBuilder(String urlStr, Map<String, String> paramMap, Map<String, String> header) { 
   
		HttpUrl.Builder urlBuilder = HttpUrl.parse(urlStr).newBuilder();
		if (paramMap != null) { 
   
			for (String key : paramMap.keySet()) { 
   
				urlBuilder.setQueryParameter(key, paramMap.get(key));
			}
		}
		Request.Builder requestBuilder = new Request.Builder().url(urlBuilder.build())
				.headers(header == null ? new Headers.Builder().build() : Headers.of(header)).get();
		return requestBuilder;
	}

	/**
	 * 同步请求
	 */
	public static <T> BaseResponseVo<T> post(String urlStr, Map<String, String> paramMap, Class clazz) { 
   
		return post(urlStr, paramMap, null, clazz);
	}

	public static <T> BaseResponseVo<T> post(String urlStr, Map<String, String> paramMap, Map<String, String> header, Class clazz) { 
   
		Request.Builder oneBuilder = getOneBuilder(urlStr, paramMap, header);
		Request request = oneBuilder.build();
		try { 
   
			log.info("请求:OKHttpUtil-post-日志信息请求参数:" + urlStr + " " + paramMap.toString());
			Response response = client.newCall(request).execute();
			if (response != null && response.isSuccessful()) { 
   
				if (response.body() == null) { 
   
					log.info("响应:OKHttpUtil-post-日志信息响应结果未空:");
					return BaseResponseVo.err("1", "response.body内容为空", null);
				}
				String content = response.body().string();
				log.info("响应:OKHttpUtil-post-日志信息响应结果:" + content);
				// String content ="{error_msg: \"成功\",error_code: 0}";
				// String content = "{error_msg: \"失败\",error_code: 1}";

				if (!StringUtils.isEmpty(content)) { 
   
					T obj = (T) FastJsonUtil.jsonToBean(content, clazz);
					return BaseResponseVo.succ("0", "获取成功", obj);
				}
			}
		} catch (IOException e) { 
   
			e.printStackTrace();
			return BaseResponseVo.err(e.toString());
		}
		return BaseResponseVo.err("1", "获取失败", null);
	}

	public static <T> BaseResponseVo<T> get(String urlStr, Map<String, String> paramMap, Map<String, String> header, Class clazz) { 
   
		Request.Builder oneBuilder = getGetBuilder(urlStr, paramMap, header);
		Request request = oneBuilder.build();
		try { 
   
			log.info("请求:OKHttpUtil-post-日志信息请求参数:" + urlStr + " " + paramMap.toString());
			Response response = client.newCall(request).execute();
			if (response != null && response.isSuccessful()) { 
   
				if (response.body() == null) { 
   
					log.info("响应:OKHttpUtil-get-日志信息响应结果未空:");
					return BaseResponseVo.err("1", "response.body内容为空", null);
				}
				String content = response.body().string();
				log.info("响应:OKHttpUtil-get-日志信息响应结果:" + content);
				if (!StringUtils.isEmpty(content)) { 
   
					T obj = (T) FastJsonUtil.jsonToBean(content, clazz);
					return BaseResponseVo.succ("0", "获取成功", obj);
				}
			}
		} catch (IOException e) { 
   
			e.printStackTrace();
			return BaseResponseVo.err(e.toString());
		}
		return BaseResponseVo.err("1", "获取失败", null);
	}
}

4.调用第三方接口

黄色线表示访问第三方接口

在这里插入图片描述

现在我们可以来测试一下了

在这里插入图片描述

与第三方接口对接就完成了
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133282.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 网页游戏开发入门教程一(webgame+design)

    网页游戏开发入门教程一(webgame+design)网页游戏开发入门教程一(webgame+design) 一、简单的程序框架。webgame程序构成:三大部分。第一是数据流程。第二是程序。第三是美术。其中,数据流程包括了功能。也只有在功能中才能体现数据流程。数据流程相当的麻烦,后面再讨论。比如最简单的卖买产品。要实现这个功能。那么需要有产品基础表、产品详细表、商店表、背包表。如果扩展性更强,相应

    2022年5月2日
    53
  • stm32中u8,u16,u32的理解_常用stm32是什么型号

    stm32中u8,u16,u32的理解_常用stm32是什么型号http://www.51hei.com/bbs/dpj-27167-1.html在KeilMDK开发环境里,比如一个无符号32位整形数据会有很多种表示方法:1.unsignedint32(C语言标准表达方法)    2.uint32_t;      3.u32;  这三种方式都是在表达同一个意思。可为什么ST的开发人员要搞的这么乱呢? 其实ST搞这

    2022年8月31日
    5
  • 查看是否安装apache_查找手机应用安装位置

    查看是否安装apache_查找手机应用安装位置如果你是问linux自动安装的APACHE的话,直接使用apachectl -v命令,如果告诉你没有这个方法就可以知道系统没有安装apache,如果已经安装了则显示apache的版本,至于安装目录,使用apachectl -c就可以知道了。

    2022年9月21日
    4
  • Source Insight 4.0 序列号 license文件

    Source Insight 4.0 序列号 license文件安装程序下载在官网上下载SourceInsight4.0的安装程序.目前版本4.00.0098可用30天的试用安装首次启动选择授权方式,这里选择第二个选项,30天试用。点击下一步,输入名称、公司或组织名称、邮箱信息,申请30天的试用。输入完成后,点击下一步,直到安装完成。修改sourceinsight4.exe用16进制编辑器(sublimetext)打开s…

    2022年7月26日
    383
  • c++ SIMD AVX2比较 例子

    c++ SIMD AVX2比较 例子示例代码含义:记目标字符串中有多少个目标字符。linux代码(例子)如下:#include<iostream>#include<x86intrin.h>#include<fstream>#include<chrono>usingnamespacestd;structStringView{constchar*p;constsize_tlen;};StringViewFileSize(const

    2022年5月20日
    44
  • 一些安全扫描工具_web弱口令扫描工具

    一些安全扫描工具_web弱口令扫描工具术语表术语定义敏感数据敏感数据的具体范围取决于产品具体的应用场景,产品应根据风险进行分析和判断。典型的敏感数据包括口令、银行帐号、大批量个人数据、用户通信内容和密钥等。一类如果丢失或者泄漏,会对数据的所有者造成负面影响的数据。本基线定义的“敏感数据”包括但不限于:口令、通行码、密钥、证书、License、隐私数据(如短消息的内容)、授权凭…

    2022年9月28日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号