Java实现调用对方http接口得到返回数据
作者:peachlf 发布时间:2023-02-27 22:36:29
标签:Java,http接口,返回数据
Java 用对方http接口得到返回数据
如图所示我们这里自己写一个接口作为访问地址,返回的是json字符串
首先我们在浏览器访问这个接口的地址,会在浏览器打印出如图所示的内容,
然后我们写一个方法访问刚刚的接口地址,使用HttpURLConnextion进行访问,通过BufferedReader获取流,已得到返回的值
运行这个方法,会在控制台打印出接口返回的值,也可以进行相应的操作
如图所示是第二种方法,通过URL进行连接,然后通过openStream方法获取返回值的流转为BufferedReader,然后进行相应的操作
接着赋值url接口地址后,运行后结果如图所示,这里还可以使用jsonfrom等方法对获取的返回值进行json解析,以更方便操作
java后台工具类调用api接口,解析数据
httpclient后台调用接口,解析数据
一 、 引入jar包
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
<!-- JSON转换包 -->
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
二、 httpclient请求接口工具类
2.1 get、post、“head”, “options”, “delete”, "trace"等方式
public class HttpClient {
/**
* 向目的URL发送post请求
*
* @param url 目的url
* @param headerParams 请求头参数 key:value
* @param bodyParams 请求体参数 key:value
* @return
*/
public static String sendPostRequest(String url, Map<String, String> headerParams,
Map<String, String> bodyParams) {
RestTemplate client = new RestTemplate();
//新建Http头,add方法可以添加参数
HttpHeaders headers = new HttpHeaders();
//给请求头设置参数
for (String key : headerParams.keySet()) {
headers.add(key, headerParams.get(key));
}
//设置请求发送方式HttpMethod.GET、HttpMethod.DELETE等
HttpMethod method = HttpMethod.POST;
// 设置提交方式这里设置成application/json格式
headers.setContentType(MediaType.APPLICATION_JSON);
//将请求头部和参数合成一个请求
HttpEntity<Map<String, String>> requestEntity = new HttpEntity<>(bodyParams, headers);
//执行HTTP请求,将返回的结构使用String 类格式化(可设置为对应返回值格式的类)
ResponseEntity<String> response = client.exchange(url, method, requestEntity, String.class);
//返回类型也可以自动填充到实体类当中去,比如我自己创建了User类,当然字段名称要和返回字段一致
//ResponseEntity<User> response = client.exchange(url, method, requestEntity, User.class);
return response.getBody();
}
2.2 PATCH等其他方式
/**
* 向目的URL发送patch请求,只比其他方式多了一个允许aptch方式的方法。
* 由于httpclient不支持patch请求,所以需要反射方式获取连接对象,增加patch方式
* @param url 目的url
* @param headerParams 请求头参数
* @param bodyParams 请求体参数
* @return AdToutiaoJsonTokenData
*/
public static String sendPatchRequest(String url, Map<String, String> headerParams,
Map<String, String> bodyParams) {
//httpclient不支持patch请求,反射方式获取连接对象,增加patch方式
allowMethods("PATCH");
RestTemplate client = new RestTemplate();
//新建Http头,add方法可以添加参数
HttpHeaders headers = new HttpHeaders();
//给请求头设置参数
for (String key : headerParams.keySet()) {
headers.add(key, headerParams.get(key));
}
//headers.add("X-HTTP-Method-Override", "PATCH");
//设置请求发送方式
HttpMethod method = HttpMethod.PATCH;
// 设置提交方式这里设置成application/json格式
headers.setContentType(MediaType.APPLICATION_JSON);
//将请求头部和参数合成一个请求
HttpEntity<Map<String, String>> requestEntity = new HttpEntity<>(bodyParams, headers);
//执行HTTP请求,将返回的结构使用String 类格式化(可设置为对应返回值格式的类)
ResponseEntity<String> response = client.exchange(url, method, requestEntity, String.class);
return response.getBody();
}
//增加支持patch请求方式
private static void allowMethods(String... methods) {
try {
//获取连接类的属性,给属性添加aptch就允许aptch请求方式了
Field methodsField = HttpURLConnection.class.getDeclaredField("methods");
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(methodsField, methodsField.getModifiers() & ~Modifier.FINAL);
methodsField.setAccessible(true);
String[] oldMethods = (String[]) methodsField.get(null);
Set<String> methodsSet = new LinkedHashSet<>(Arrays.asList(oldMethods));
methodsSet.addAll(Arrays.asList(methods));
String[] newMethods = methodsSet.toArray(new String[0]);
methodsField.set(null/*static field*/, newMethods);
} catch (NoSuchFieldException | IllegalAccessException e) {
throw new IllegalStateException(e);
}
}
2.3 解析数据
//工具类调用api接口,获取返回数据
String result = HttpClient.sendPostRequest(createZoomMeetingUrl,header,body);
JSONObject json = JSONObject.fromObject(result);
//解析获取数据
String startUrl = json.getString("start_url");
String joinUrl = json.getString("join_url");
//会议室id
int id = json.getInt("id");
//解析数据数据
JSONArray jsonArray = json.getJSONArray("users");
for(int i=0;i<jsonArray .size();i++){
String firstName = jsonArray.getJSONObject(i).getString("first_name");
...............
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
来源:https://www.cnblogs.com/peachh/p/13658125.html
0
投稿
猜你喜欢
- 今天闲来无事写了一个清内存的小东西,类似360,在桌面上悬浮,点击后清除后台无用程序,清除后台程序是通过调用ActivityManger.k
- Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,
- 我们知道多线程因为同时处理子线程的能力,对于程序运行来说,能够达到很高的效率。不过很多人对于多线程的执行方法还没有尝试过,本篇我们将为大家介
- Java音频播放,因为必须依赖到本地环境,所以JAVA在音频处理方面优势不大,或者说打从Java体系开发时就没太多的考虑音频播放
- JSON.toJSONString格式化成json字符串时保留null属性使用阿里的com.alibaba.fastjson.JSON格式化
- Spring Boot 简介spring框架功能很强大,但是就算是一个很简单的项目,我们也要配置很多东西。因此就有了Spring Boot框
- 先介绍下一些基本定义串行通信:通过的是PLC上的串行口RS232/RS422/485口,上位机链接系统 Hostlink系统是对于FA系统一
- 本文以实例阐述了C++中形参与实参的区别,有助于读者加深对于C++形参与实参的认识。形参出现在函数定义中,在整个函数体内都可以使用, 离开该
- string fileExt = Path.GetExtension(excelPath);string conn = "&quo
- 当你在使用Mybatis 时进行配置的时候有这样几个坑一定要注意下。mybatisplus中逻辑删除通俗说为了在数据库中保留数据,但是又不想
- 实际项目中pom.xml依赖写法: <dependency> <groupId>org.springf
- 前言Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。(负载均衡+RestTempl
- 本文实例为大家分享了C#通过NPOI导入导出数据EXCEL的具体代码,供大家参考,具体内容如下其实从数据库到服务器导入导出有很多方法,但是比
- 引言最近在写一个 Mybatis 代码自动生成插件,用的是Mybatis来扩展,其中有一个需求就是 生成javaMapper文件和 xmlM
- 一、需求描述拼图是一款益智类经典游戏了,本游戏学习了一些前辈们的经验,整体来说讲,将图片用切图工具进行切割,监听用户手指滑动事件,当用户对凌
- 写在前面在前后端交互过程中,为了保证信息安全,我们往往需要加点用户验证。本文介绍了用springboot简单整合token。springbo
- Excel表格中,由于各种数据的复杂性,可能存在单元格中的数据字号大小、数据内容长度不一而出现,列宽过宽、过窄或者行高过大、过小的问题。常见
- 本文实例讲述了java实现List中对象排序的方法。分享给大家供大家参考,具体如下:package com.test; import jav
- 前言大家都知道,equals和hashcode是java.lang.Object类的两个重要的方法,在实际应用中常常需要重写这两个方法,但至
- 命令模式定义:将请求封装成对象,这可以让你使用不同的请求、队列、或者日志来参数化其他对象。何时使用命令模式?当需要将发出请求的对象和执行请求