java springboot调用第三方接口 借助hutoool工具类 爬坑
Posted ytshang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java springboot调用第三方接口 借助hutoool工具类 爬坑相关的知识,希望对你有一定的参考价值。
首先描述一下我的任务,也是需求。
传一个设备序列号deviceSerial,调用萤石平台https://open.ys7.com/第三方接口,获取到这个设备对应的高清播放地址rtmp。
话不多说,先上代码。
pom文件:主要是添加了hutool和fastjson的依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.4</version> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>4.1.0</version> </dependency>
配置application.yml
server: port: 8081 system: url: https://open.ys7.com
工具类MyProps:主要是获取配置文件中的第三方接口url
@Component @ConfigurationProperties(prefix="system") public class MyProps public String url; public String getUrl() return url; public MyProps setUrl(String url) this.url = url; return this;
调用的controller
@RestController @RequestMapping("/user") public class TokenController @Autowired private MyProps myProps; @PostMapping("/token") public String getToken() throws Exception Map<String,Object> map = new HashMap<String,Object>(); map.put("appKey","123456123456"); map.put("appSecret","654321654321"); String tokenStr = ""; try tokenStr = HttpUtil.post(myProps.getUrl()+"/api/lapp/token/get",map); catch (Exception e) e.printStackTrace(); throw new Exception("第三方接口异常"); com.alibaba.fastjson.JSONObject jsonTokenStr = JSON.parseObject(tokenStr); System.out.println(JSON.toJSONString(jsonTokenStr)); String data = jsonTokenStr.getString("data"); com.alibaba.fastjson.JSONObject jsondata = JSON.parseObject(data); String accessToken = jsondata.getString("accessToken"); return accessToken; @PostMapping("/rtmp") public String getRtmp(@RequestParam(required = true) String deviceSerial) Map<String,Object> paramsMap = new HashMap<String,Object>(); paramsMap.put("accessToken","at.123456123456"); paramsMap.put("pageStart",0); paramsMap.put("pageSize",3); String result = ""; result = HttpUtil.post(myProps.getUrl()+"/api/lapp/live/video/list",paramsMap); com.alibaba.fastjson.JSONObject jsonresult= JSON.parseObject(result); System.out.println(jsonresult.toString()); // String data = jsonresult.getString("data"); // return data; JSONArray ja = jsonresult.getJSONArray("data"); for(int i = 0; i < ja.size(); i++) com.alibaba.fastjson.JSONObject jo = ja.getJSONObject(i); System.out.println(jo.getString("deviceSerial")); if(deviceSerial.equals(jo.getString("deviceSerial"))) return jo.getString("rtmp"); return "找不到该设备";
再贴一下整个代码的目录结构,项目用maven构建,然后启动即可。
刚接到这个任务的时候,我其实是很懵逼的,因为确实spring boot看视频才刚搞清楚一个maven工程的目录结构,哪里修改配置这些东西。这一下子就让我调第三方接口,我真的一点概念都没有,就只能疯狂百度。你知道对于一个新手来说,最尴尬的是百度的时候,不知道关键词,所以检索的很不精准。像我什么概念都不知道,百度就只能锁定关键词java springboot 调用第三方接口,然后就出来一大堆springboot整合RestTemplate调用第三方接口的教程。刚一开始我确实是尝试用restTemplate来写,但可能真的是我太菜了,看不懂那些教程,跟着走了但是项目一直标红报错,进行不下去。好不容易不标红了,启动项目,在浏览器中只能看到Whitelabel Error Page There was an unexpected error (type=Method Not Allowed, status=405). Request method ‘GET‘ not supported,这个提示其实很明显了对吧。萤石平台的第三方接口请求方式是POST,所以直接在浏览器中输入接口地址根本看不到返回的数据结果。然后我又懵逼了,因为我不知道请求方式是POST该怎么处理,卡了好半天,才想到用Postman来测接口,我是真的有点笨哦。然后我就装了一个Postman,按照萤石官网的API接口文档试了一下,终于看到返回结果了。
HttpUtil.post()方法返回的是一个字符串,这里需要把字符串转换成json对象,所以在pom.xml文件中添加了fastjson的依赖,用JSON.parseObject()方法即可。转成json对象后,就可以用json内置的各种方法了,getString()把key对应的value取出来。
不想写了,写了好多,反正最后的结果就是我成功的拿到了accessToken,然后仿照着这个方法写了获取高清地址rtmp的方法,因为这两个接口返回的数据格式还是不太一样的,所以中途遇到了一点点小问题。贴一个我觉得很好的java从JSONObject中取值的博客链接吧https://blog.csdn.net/kxj19980524/article/details/83718971?tdsourcetag=s_pcqq_aiomsg,大家看看就明白了。
还有就是获取rtmp的方法,必须要传一个设备序列号,所以要加上@RequestParam,默认值是true,必须要传,不传就报错。有的方法可传可不传那就让required=false。
public String getRtmp(@RequestParam(required = true) String deviceSerial)...
@RequestParam是直接从请求中取参,它是直接拼接在url后面的。
原来的url http://localhost:8081/user/rtmp 请求发出去之后拼接的url http://localhost:8081/user/rtmp?deviceSerial=1123456123456
如果这篇文章能帮到大家,我当然也是很开心的了。欢迎有志之士一起学习,楼主目前的状态是学习后端中,也不知道会学到多久。
以上是关于java springboot调用第三方接口 借助hutoool工具类 爬坑的主要内容,如果未能解决你的问题,请参考以下文章