Java实现调用对方http接口得到返回数据
作者:peachlf 时间:2023-02-27 22:36:29
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
标签:Java,http接口,返回数据
0
投稿
猜你喜欢
RocketMQ NameServer架构设计启动流程
2023-12-13 07:40:01
新手入门Jvm--jvm概览
2023-11-09 15:42:31
emoji表情与unicode编码互转的实现(JS,JAVA,C#)
2023-02-07 06:07:48
使用JavaBean根据指定条件设置属性值默认值方式
2023-03-23 04:03:25
feign客户端设置超时时间操作
2023-07-01 19:16:32
myeclipse安装Spring Tool Suite(STS)插件的方法步骤
2023-02-22 00:56:02
Java设计模式之监听器模式实例详解
2022-10-04 02:51:44
举例讲解Java设计模式编程中Decorator装饰者模式的运用
2023-01-13 03:17:00
Spring Boot Gradle发布war到tomcat的方法示例
2021-09-24 11:36:57
Spring实战之ResourceLoader接口资源加载用法示例
2023-11-20 12:16:49
通过Feign进行调用@FeignClient 找不到的解决方案
2023-08-18 19:06:52
Springboot+Mybatis-plus不使用SQL语句进行多表添加操作及问题小结
2021-09-30 10:31:10
Android手势识别功能
2022-07-23 22:04:26
使用springboot整合RateLimiter限流过程
2022-09-12 21:42:48
C#中属性和成员变量的区别说明
2022-02-17 22:36:57
C# 多线程更新界面的错误的解决方法
2022-01-20 15:52:21
轻松掌握Java建造者模式
2023-11-06 15:24:38
Android自定义View仿IOS圆盘时间选择器
2023-10-12 20:40:32
C#值类型、引用类型中的Equals和==的区别浅析
2022-09-05 23:04:24
对Java的面对对象编程中对象和引用以及内部类的理解
2022-02-22 12:11:15