引言:在我们开发的过程中,常常会听到或者接触到第三方接口,那么这个第三方接口到底是什么呢?
简单来说就是一个远程接口,不是在你本机上的,你需要通过远程url去访问调用该接口。许多项目中有明确的要求需要调用第三方接口,因为两边处理的业务可能不太一样,但是要求做到数据能够同步。打个比方,你在本地删除了一些数据,但是第三方数据库中却还存在该数据,这时候那就需要调用第三方的接口来进行一个数据删除,到达数据同步的目的。项目中有明确要求需要调用第三方接口的,一般都会有规范的接口调用文档,调用第三方接口时,你只需要根据该接口文档来封装传输参数的格式,并接收相应的返回参数,下面是一个实际项目中调用第三方接口的示例:

文章目录

  • 一。接口规范文档示例
  • 二。调用第三方接口工具类
  • 三。在本地service层写好调用接口
  • 四。接口实现
  • 五。控制器业务调用

一。接口规范文档示例

1.请求参数规范如下:

2.返回参数规范如下:

二。调用第三方接口工具类

工具类代码如下:

package cn.stylefeng.guns.core.util;import cn.stylefeng.guns.core.common.exception.BizExceptionEnum;
import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;/*** 调用第三方接口工具类*/
public class HttpUtil {private static Logger logger = LoggerFactory.getLogger(HttpUtil.class);public HttpUtil() {}/*** 提交json数据格式的post请求* @param url* @param requstBody* @return* @throws Exception*/public static String doPost(String url, String requstBody) throws Exception {return doPost(url, requstBody, "application/json; charset=UTF-8", "POST", "UTF-8");}/*** 处理post请求* @param url* @param requstBody* @param contentType* @param requestMethod* @param charset* @return* @throws Exception*/public static String doPost(String url, String requstBody, String contentType, String requestMethod, String charset) throws Exception {StringBuffer buffer = new StringBuffer();InputStream inputStream = null;OutputStream outputStream = null;BufferedReader reader = null;OutputStreamWriter writer = null;URL urlObject = null;HttpURLConnection connection = null;try {urlObject = new URL(url);connection = (HttpURLConnection)urlObject.openConnection();connection.setRequestMethod(requestMethod);//设置请求方式为POSTconnection.setRequestProperty("Accept", contentType);connection.setRequestProperty("Charset", charset);//设置字符编码connection.setRequestProperty("Content-type", contentType);//设置参数类型connection.setDoInput(true);//允许写出connection.setDoOutput(true);//允许读入connection.setConnectTimeout(300000);//连接主机的超时时间(单位:毫秒)connection.setReadTimeout(300000);//从主机读取数据的超时时间(单位:毫秒)connection.setAllowUserInteraction(true);//为true,则在允许用户交互(例如弹出一个验证对话框)的上下文中对此URL进行检查connection.connect();//建立连接outputStream = connection.getOutputStream();writer = new OutputStreamWriter(outputStream, charset);writer.write(requstBody);writer.flush();writer.close();checkResponseCode(connection.getResponseCode());inputStream = connection.getInputStream();reader = new BufferedReader(new InputStreamReader(inputStream, charset));String line = null;while((line = reader.readLine()) != null) {buffer.append(line);}} catch (Exception var16) {throw var16;} finally {if (reader != null) {reader.close();}if (writer != null) {writer.close();}if (outputStream != null) {outputStream.close();}if (inputStream != null) {inputStream.close();}if (connection != null) {connection.disconnect();}}return buffer.toString();}/*** 提交带参数的get请求* @param url* @param charset* @return* @throws Exception*/public static String doGet(String url, String charset) throws Exception {return doGet(url, "application/json; charset=" + charset, charset);}/*** 处理get请求* @param url* @param contentType* @param charset* @return* @throws Exception*/public static String doGet(String url, String contentType, String charset) throws Exception {BufferedReader in = null;HttpURLConnection conn = null;try {url = dealUrlParameter(url, charset);URL realUrl = new URL(url);conn = (HttpURLConnection)realUrl.openConnection();conn.setRequestMethod("GET");conn.setRequestProperty("Accept", "*/*");conn.setRequestProperty("Charset", charset);conn.setRequestProperty("Accept-Charset", charset);conn.setRequestProperty("Connection", "Keep-Alive");conn.setRequestProperty("User-Agent", "Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");conn.setRequestProperty("Content-Type", contentType);conn.setConnectTimeout(300000);conn.setReadTimeout(300000);conn.setUseCaches(false);checkResponseCode(conn.getResponseCode());in = new BufferedReader(new InputStreamReader(conn.getInputStream(), charset));StringBuilder builderLine = new StringBuilder();String line;while((line = in.readLine()) != null) {builderLine.append(line);}logger.debug(builderLine.toString());String var8 = builderLine.toString();return var8;} catch (Exception var17) {logger.error(var17.toString());throw var17;} finally {try {if (conn != null) {conn.disconnect();}if (in != null) {in.close();}} catch (IOException var16) {var16.printStackTrace();}}}/*** 处理get请求传递的参数* @param url* @param charset* @return* @throws IOException*/public static String dealUrlParameter(String url, String charset) throws IOException {int parameterIndex = url.indexOf("?");if (parameterIndex==-1) {return url;} else {String parameter = url.substring(parameterIndex + 1);String[] parameterArray = parameter.split("&");StringBuffer newParameter = new StringBuffer();String[] var6 = parameterArray;int var7 = parameterArray.length;for(int var8 = 0; var8 < var7; ++var8) {String kv = var6[var8];String[] keyValue = kv.split("=");String vlaue = keyValue.length == 2 && keyValue[1] != null ? URLEncoder.encode(keyValue[1], charset) : "";if (newParameter.length() == 0) {newParameter.append(keyValue[0]).append("=").append(vlaue);} else {newParameter.append("&").append(keyValue[0]).append("=").append(vlaue);}}return url.substring(0, parameterIndex) + "?" + newParameter;}}/*** 检验是否交互成功* @param responseCode*/public static void checkResponseCode(int responseCode) {if (responseCode < 400) {logger.info("请求交互成功");} else if (responseCode < 500) {if (responseCode == 429) {throw new ServiceException(BizExceptionEnum.REQUEST_NULL);} else {throw new ServiceException(BizExceptionEnum.REQUEST_NULL);}} else {throw new ServiceException(BizExceptionEnum.SERVER_ERROR);}}
}

三。在本地service层写好调用接口

 /*** @Author ${USER}* @Description 添加人脸推送* @Date 16:21 2020/4/10* @Param* @return**/String pushAddFace(List<Map<Object,Object>> list);

四。接口实现

这里调用第三方接口:

  @Overridepublic String pushAddFace(List<Map<Object,Object>> list) {String message="";try{String url="这里输入你需要调用的第三方接口url";String json= JSON.toJSONString(list);message=HttpUtil.doPost(url,json);}catch(Exception e){e.printStackTrace();}return message;}

五。控制器业务调用

        //调用第三方接口List<Map<Object,Object>> list=new ArrayList<>();Map<Object,Object> map=new HashMap<>();//接口参数map.put("person_id",faceId);map.put("person_name",faceRecognition.getUserName());map.put("face_picture",fileData);list.add(map);//调用接口后返回参数String message=faceRecognitionService.pushAddFace(list);//转化为json数据JSONObject ject=JSONObject.parseObject(message);if(ject.get("success").equals("false")){throw new ServiceException(BizExceptionEnum.REQUEST_NULL);}

总结:其实调用第三方接口也与我们调用自己写好的接口一样,在service层写好自己的接口,然后写接口的实现,只不过接口的实现换成了调用第三方接口,最后在控制器中写业务逻辑,并调用该接口。

java调用第三方接口示例相关推荐

  1. Java 调用第三方接口方法

    Java 调用第三方接口方法 一. 通过JDK网络类Java.net.HttpURLConnection 1.java.net包下的原生java api提供的http请求 使用步骤: 1.通过统一资源 ...

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

    在项目开发中经常会遇到调用第三方接口的情况,比如说调用第三方的天气预报接口. 1.准备工作: 在项目的工具包下导入HttpClientUtil这个工具类,或者也可以使用Spring框架的restTem ...

  3. Java调用第三方接口示范

    在项目开发中经常会遇到调用第三方接口的情况,比如说调用第三方的天气预报接口. 使用流程 [1]准备工作:在项目的工具包下导入HttpClientUtil这个工具类,或者也可以使用Spring框架的re ...

  4. java调用第三方接口发送手机验证码

    本实例调用互亿无线触发短信接口,采用commons-httpclient-3.1.jar及dom4j-1.6.1.jar俩个jar包实现,可根据个人需求更改调用接口 //接口类型:互亿无线触发短信接口 ...

  5. java调用第三方接口_java调用第三方接口,获取接口返回的数据。

    java接收远程调用的数据,得到的是如上个数的返回内容,我怎么写才能获取到值,现在使用的请求方法如下: public static HttpResult postJsonData(String url ...

  6. Java调用第三方http接口 单点登录 HttpClient

    Java调用第三方http接口的方式 Java调用第三方接口示范 范例: 响应形式: 主逻辑: 访问此地址:http:// { cas }/cas/login?service=http://local ...

  7. http方式调用第三方接口

    java如何调用对方http接口(II) - 流年煮雪 - 博客园 纯Java api HttpURLConnection Java调用外部接口_CJD的博客-CSDN博客_调用外部接口 纯Java  ...

  8. Java 调用http接口(基于OkHttp的Http工具类方法示例)

    目录 Java 调用http接口(基于OkHttp的Http工具类方法示例) OkHttp3 MAVEN依赖 Http get操作示例 Http Post操作示例 Http 超时控制 工具类示例 Ja ...

  9. java调用第三方天气预报API接口

    java调用第三方天气预报API接口 package com.sensordata.controller; import com.common.json.JSONObject; import java ...

最新文章

  1. python123期末测验答案程序题_python期末题库(2)带答案
  2. Sql Server'不允许保存更改'错误►防止保存需要重新创建表的更改
  3. Sequence在Oracle中的使用
  4. python详细安装步骤-Pycharm及python安装详细教程(图解)
  5. Failed to start bean ‘documentationPluginsBootstrapper‘ StackOverflowError
  6. echarts——父元素宽度100%,但canvas宽度100px
  7. 线程池---多线程学习笔记(三)
  8. 安卓与ios都是linux,随便来说两句,安卓、IOS不是那么容易被取代的
  9. 数字拆分为斐波那契数列_检查数字是否为斐波那契
  10. thymeleaf 使用页面报错_SpringBoot 使用thymeleaf 跳转页面时,总是提示404找不到页面...
  11. C++实现PCA变换
  12. [论文总结] 深度学习在农业领域应用论文笔记8
  13. html css 分页样式,css中分页样式
  14. 编译原理逆波兰式实验java_逆波兰式算法的编译原理实验过程.doc
  15. js正则去除头尾的指定符号
  16. IOS 自定义 滑动返回 手势
  17. 【搬运】黑苹果台式机机型选择指导 By 黑果小兵
  18. 【ArcGIS Pro二次开发】(7):地图(Map)的基本操作
  19. greenplum-执行SQL创建SliceGang 学习计划。
  20. Python @property 用法

热门文章

  1. 【Pytorch】backward()简单理解
  2. 中国服装行业已形成一套完整的产业体系
  3. 使用控件的RenderControl()方法导出Excel
  4. 冒泡法排序(PTA)
  5. Android-P夜间模式
  6. W ndows7蓝屏0x00000024,Win7系统开机蓝屏提示错误代码0x00000024的故障分析及解决方法...
  7. mysql 子表_MySQL子查询,派生表和通用表达式
  8. 最新Java高级面试题汇
  9. php微信公众号开发,获取用户头像,并下载;
  10. “前线”与“后方”—数字化转型时代理解华为品质服务的价值