调用第三方接口

article/2025/8/27 6:50:06

快速使用:调用第三方接口获取数据(简易版)_myme95的博客-CSDN博客_调用第三方接口

controller层

img

 private String jokeApiKey = "40ff81dexxxxxxxxxxxx97a39d39";@AutowiredApiService apiService;/*** 京东万象-笑话api*/@GetMapping("/getJoke")@ResponseBodypublic Output jokeApi() throws Exception {//得到long类型当前时间long l = System.currentTimeMillis();//new日期对象Date date = new Date(l);//转换提日期输出格式SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");String time = dateFormat.format(date);​String api = "https://way.jd.com/showapi/wbxh?time=" + time + "&page=1&maxResult=20&showapi_sign=bd0592992b4d4050bfc927fe7a4db9f3&appkey=" + jokeApiKey;​String str = apiService.httpRequest(api);​​JSONObject jsonObject = JSON.parseObject(str);String code = jsonObject.getString("code");if (code == null) {throw new Exception("数据获取有误!");}JSONObject resultJsonObject = jsonObject.getJSONObject("result");JSONObject bodyJsonObject = resultJsonObject.getJSONObject("showapi_res_body");JSONArray contentListArray = bodyJsonObject.getJSONArray("contentlist");List<Item> itemList = JSONArray.parseArray(contentListArray.toJSONString(),Item.class);Output output = new Output();output.setResult(itemList);return output;}

service层

在controller层里我说了,我们暂时只需要关注1~4步。

你在controller层里面拼接好了地址以后,就可以把拼接了你appKey、time等等参数的url传给service进行进一步的业务处理,也就是我们真正的调用三方接口的处理逻辑。

img

img

 public String httpRequest(String apiPath) {BufferedReader in = null;StringBuffer result = null;//调用的api的接口地址String apiUrl = apiPath;try {URL url = new URL(apiPath);//打开和url之间的连接HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");connection.setRequestProperty("Charset", "utf-8");connection.connect();result = new StringBuffer();//读取URL的响应in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String line;while ((line = in.readLine()) != null) {result.append(line);}return result.toString(); //返回json字符串} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {if (in != null) {in.close();}} catch (IOException e) {e.printStackTrace();}​}return null;}

这个方法执行成功之后,返回的是一个json字符串。

img

将获取的数据转换为Json对象。

img

img

img

拿到了返回数据之后,你就可以把值一个一个取出来然后存到你的数据库里。当然你的数据库里一定要先有一张对应的表才是。

json包我用的是fastjson,它的maven依赖如下。

 <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.57</version></dependency>

输出类Output的代码(可以根据个人需求做个性化定制~,比如你可以多返回一个errorcode什么的,这都是Ok的):

 import java.io.Serializable;public class Output implements Serializable {//serialVersionUID 这个是序列化时要用到的,idea可以自动生成,//但是我也不知道怎么生成,可以自己百度一下。这是公司大佬之前//封装的(此处感恩大佬又让我学到了新东西!)private static final long serialVersionUID = 7247613666080613254L;//状态码,比如这里定义status默认200,代表接口调用成功。代表网络上的成功而已。private int status = 200; //code有的人会写成errorCode,是“错误代码”的意思。这是代表业务逻辑上的成功与否‘//默认0,代表你的业务逻辑没问题,此次调用成功了。打个比方,你调用接口进行一个“新增”操作,//新增成功返回一个code=0代表你此次新增成功了。否则你返回一个code=201(或者其他随便什么//只要你喜欢)代表新增失败。private int code = 0;  //错误信息,比如“新增失败!”等private String message;//如果新增成功,就把你想要抛出去的东西放在result里面跑出去。result用Object定义。随便你//放什么进去都OK ,String、int、List...  whatever you wantprivate Object result;public int getStatus() {return this.status;}public void setStatus(int status) {this.status = status;}public int getCode() {return this.code;}public void setCode(int code) {this.code = code;}public String getMessage() {return this.message;}public void setMessage(String message) {this.message = message;}public Object getResult() {return this.result;}public void setResult(Object result) {this.result = result;}public Output() {}public Output(Object result) {this.result = result;}public Output(int code, String message) {this.code = code;this.message = message;}}

后续问题

今天遇到一个小问题。我调用一个api,那个api的数据提交是form表单。而我之前包括这篇文章写的方法都是以json格式传参数的。所以就出现了问题,当我以json格式的参数去请求一个本应以表单形式提交参数的api,那边防火墙会拦截下来,告诉我参数不合法。

后来我知道了,post方法的参数请求有两种形式:form表单形式(key=value数据格式)和json形式(key:value数据形式)。这两种方式对应的调用方法大同小异。


http://chatgpt.dhexx.cn/article/mWElkNEv.shtml

相关文章

国内7款API供应平台功能对比及详细介绍

我们都知道一句话“巧妇难为无米之炊”&#xff0c;数据源就是数据产生价值中的那些大米。那大数据时代企业需要哪些数据呢&#xff1f;根据我个人理解我觉得可以大致分为以下几类&#xff1a; 1、&#xff08;内部&#xff09;企业自身业务生产经营环节产生的内部数据【包括销…

Java Web系统常用的第三方接口

1. Web Service 接口 1.1 接口方式说明和优点 在笔者的开发生涯中&#xff0c;当作为接口提供商给第三方提供接口时&#xff0c;以及作为客户端去调用第三方提供的接口时&#xff0c;大部分时候都是使用 Web Service接口&#xff0c; Web Service作为接口使用广泛的…

进制转换2

进制之间的转换 本文转自&#xff1a;http://www.bloghome.cn/posts/38472 数学 /bullly 发表于2006-07-11, 18:08 不同进制之间的转换纯粹是数学上的计算。不过&#xff0c;你不必担心会有么复杂&#xff0c;无非是乘或除的计算。 生活中其实很多地方的计数方法都多少有点不…

计算机二进制

二进制转十进制 不考虑符号为 十进制转二进制 奇数要算一次 1 / 2 偶数不需要 计算 1 / 2 奇数要算一次 1 / 2 偶数不需要 计算 1 / 2 奇数要算一次 1 / 2 偶数不需要 计算 1 / 2 奇数要算一次 1 / 2 偶数不需要 计算 1 / 2 奇数要算一次 1 / 2 偶数不需要 计算 1 / 2 奇数…

-2进制

http://oj.acm.zstu.edu.cn/JudgeOnline/problem.php?id4435 懵~ 后来问别人&#xff0c;他让我试着用二进制反推十进制&#xff0c;就晓得了(用&#xff08;-2&#xff09;^n&#xff09;。 这个是学长写的代码 //我写的时候&#xff0c;将它先变成二进制&#xff0c;再给每…

进制.2

转自&#xff1a; http://www.d2school.com/bhcpp_book/5_8.php 5.8.1 十六进制 说到十六进制&#xff0c;首先会问&#xff1a;总共只有10个阿拉伯数字&#xff1a;0、1、2、3、4、5、6、7、8、9&#xff0c;如何表达“逢16进1”的概念呢&#xff1f;方法是用英文字母&#x…

二进制及二进制转换

二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2&#xff0c;进位规则是“逢二进一”&#xff0c;借位规则是“借一当二” 二进制数&#xff08;binaries&#xff09;是逢2进位的进位制&#xff0c;0、1是基本算符 [2] &#xff1…

二进制?十进制!

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 给定两个十进制整数 : AAA,BBB 你需要把它们的二进制形式以十进制的运算法则相加输出结果。 例如&#xff1a; A3,B2A 3 , B 2A3,B2 的时候&#xff0c;AAA 的二进制表示是 : 111111 , BB…

关于二进制???

文章目录 二进制二进制转化为十进制十进制转化成二进制无符号数和有符号数原码反码补码 二进制的计算规则 二进制 二进制转化为十进制 二进制是一套计数方法&#xff0c;每个数位有0、1两种可能&#xff0c;类比在日常生活中我们使用的十进制&#xff0c;每个数位有0-9十种可…

二进制及二进制的转换

二进制&#xff08;binary&#xff09;是在数学和数字电路中指以2为基数的记数系统&#xff0c;是以2为基数代表系统的二进位制。这一系统中&#xff0c;通常用两个不同的符号0&#xff08;代表零&#xff09;和1&#xff08;代表一&#xff09;来表示 [1] 。数字电子电路中&a…

二进制转换

1、十进制数45转换为二进制 &#xff08;1&#xff09;除二取余法 除数被除数余数24512220211125122021120 自下往上&#xff1a;101101 &#xff08;2&#xff09;2的幂做加法 45 32 841 对应的是101101 2、二进制转负整数 以11010011为例子 先减1 11010010 按…

什么是二进制,进制之间是如何转换的,浅显易懂的,一看就会

什么是二进制呢? 二进制数据是用0和1两个数码来表示的数,它的基数为2,进位规则是逢二进一 加法:000;101;011;110(等价于10,向前进一) 案例(前面用0补齐) 1110,10111,111100,1001101,1011110,1101111,11111000 ... 减法: 0&#xff0d;00&#xff0c;1&#xff0d;01&#xf…

二进制详解

在计算机的世界里&#xff0c;只有0和1&#xff0c;也就是二进制。 那如何把一个十进制的数转成二进制或者其他进制&#xff0c;请下图&#xff1a; 十进制转二进制 十进制的123转成二进制就是1111011&#xff0c;转成几进制都是一个道理。 一、二进制 1.1 二进制是计算机采…

几何平均数

几何平均数是n个变量值连乘积的n次方根。 [2] 分为简单几何平均数与加权几何平均数。 1、简单几何平均数&#xff1a; 几何平均数示意图 2、加权几何平均数&#xff1a; 转载于:https://www.cnblogs.com/kakaisgood/p/9981420.html

算术平均、几何平均、调和平均、平方平均和移动平均

本文内容 算术平均几何平均调和平均平方平均移动平均 算术平均、几何平均、调和平均、平方平均和移动平均跟计算编程有什么关系&#xff1a;Just One Word&#xff0c;不能只会算术平均数&#xff0c;还有其他很多选择&#xff0c;以及不同场景使用不同的平均数。 算术平均 算…

加权平均数的例子_加权平均值和算术平均值的区别与公式

某些数值占较高比重的平均值&#xff0c;平均值&#xff0c;在计算一个简单的平均值时&#xff0c;每个数值的比重都是相同的&#xff0c;这是 1、2、3 和 4 的平均值&#xff1a; 把数值相加&#xff0c;然后除以个数&#xff1a; 平均值 1 2 3 4 10 2.5 4 4 权数我们可…

加权平均

在日常生活中&#xff0c;我们经常提到“ 平均数”。一般我们在求“ 平均数”时&#xff0c;通常是用“ 一组数据中所有数据之和再除以数据的个数”。但是&#xff0c;这种叫法是不准确的。 一般来说&#xff0c;“平均数”大致可以分为7类。即&#xff1a;“算数平均数”&a…

加权平均的重要作用

目录 ​编辑 加权平均概述&#xff1a; 加权平均值概述&#xff1a; 加权平均值数学概念&#xff1a; 权重&#xff1a; 应用&#xff1a; 加权平均概述&#xff1a; 加权平均&#xff0c;统计学术语&#xff0c;是利用过去若干个按照时间顺序排列起来的同一变量的观测值…

【数学和算法】加权平均法

加权法衡量差异 加权平均法的概念直接看这篇博客加权平均法就明白了。 在每一个数的权数相同的情况下&#xff0c;加权平均值就等于算数平均值。 以正常视力的人眼为例&#xff1a; 距离人越近的位置&#xff0c;视野越清晰&#xff0c;可信度更高&#xff0c;所以分配的权…

几何平均详解,及其与算术平均、调和平均、均方根的关系

2. 几何平均与算术平均的转换关系&#xff08;附&#xff09;&#xff1a; 3.2 几何平均数适用于求连乘样本的均值&#xff0c;它是变化的中心&#xff0c;代表平均变化率&#xff1b;算术平均数适用于求连加样本的均值&#xff0c;它是数值的中心&#xff0c;代表平均数量&am…