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.调用第三方接口

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

在这里插入图片描述

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

在这里插入图片描述

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • linux redis安装步骤_redis安装部署centos

    linux redis安装步骤_redis安装部署centos背景Redis版本6.0.1服务器版本LinuxCentOS7.664位一、下载进入官网找到下载地址https://redis.io/download鼠标右击选择复制链接地址进入到Xshell控制台,进入usr/,输入wget,命令如下:[root@bdausr]#cdusr/[root@bdausr]#wgethttps://download.redis.io/releases/redis-6.0.10.tar.gz二、解压[root@bdausr]

  • Landsat 8 波段组合「建议收藏」

    Landsat 8 波段组合「建议收藏」Landsat8hasbeenonlineforacoupleofmonthsnow,andtheimageslookincredible.WhileallofthebandsfrompreviousLandsatmissionsarestillincorporated,thereareacoupleofnewones,su…

  • js免费调用天气API

    js免费调用天气APIjs调用天气API文档参考链接:天气API文档1、首先登陆天气API进行用户注册点击右上角进行注册、登录2、打开API文档如下图其中appid和appsecret则在天气API控制器中查看其中appid和version和appsecret3者为必填选项,例如https://www.tianqiapi.com/api?version=v9&appid=84122144&appsecret=m70vbv6Acityid、city、ip则代表三种查询方式(三选一)(城市i

  • apk反编译后smali文件_apk反编译失败

    apk反编译后smali文件_apk反编译失败APK反编译之一:基础知识原文作者:lpohvbe| http://blog.csdn.net/lpohvbe/article/details/7981386APK、Dalvik字节码和smali文件APK文件  大家都应该知道APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构,例如修改后缀后用RAR

  • 超简单看明白如何求最长递增子序列-动态规划

    超简单看明白如何求最长递增子序列-动态规划最长递增子序列:给定一个长度为N的数组,找出一个最长的单调递增子序列,子序列不一定连续,但初始顺序不能乱。例如:给定一个长度为6的数组A{4,5,7,1,3,9},则其最长的单调递增子序列为{4,5,7,9},长度为4。动态规划思路:记d[i]为以任意一个A[i]为末尾元素组成的最长递增子序列的长度,找出所有位于i之前且比A[i]小的元素A[j],此时可出现两种情况:…

  • 如何优雅的在 Microsoft word中插入代码

    如何优雅的在 Microsoft word中插入代码

发表回复

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

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