使用Httpclient调用API的一些个人见解(返回的json)
来源:互联网 发布:酷宝数据 编辑:程序博客网 时间:2024/05/17 06:19
大家好,博主最近在做一个通过Httpclient调用API的项目,个人感觉Httpclient调用API的话还是挺好用的所以把自己的调用方式方法写下来希望能帮助大家。
首先、
写一个Httpclient工具类,这个工具类呢包含了Post和Get两种调用方式。代码如下:
package com.rxt.pfp.test;
import java.io.IOException;
import java.net.URLDecoder;
import java.nio.charset.Charset;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import net.sf.json.JSONObject;
public class HttpClientHelper {
* httpPost
* @param url 路径
* @param jsonParam 参数
* @return
*/
public static JSONObject httpPost(String url,JSONObject jsonParam){
return httpPost(url, jsonParam, false);
}
/**
* post请求
* @param url url地址
* @param jsonParam 参数
* @param noNeedResponse 不需要返回结果
* @return
*/
public static JSONObject httpPost(String url,JSONObject jsonParam, boolean noNeedResponse){
//post请求返回结果
@SuppressWarnings({ "deprecation", "resource" })
DefaultHttpClient httpClient = new DefaultHttpClient();
JSONObject jsonResult = null;
HttpPost method = new HttpPost(url);
//这里呢是头(就是调用API的话要有需要服务端的授权码和一些服务码类似于特权)
method.setHeader("servicecode","dspx");
method.setHeader("publickey","8D2E8CD9-2FEF-4971-A6D4-30616E29A453");
int sd=jsonParam.toString().length();
// method.setHeader("content-length",String.valueOf(sd));
// method.setHeader("content-type","application/json");
try {
if (null != jsonParam) {
//解决中文乱码问题
StringEntity entity = new StringEntity(jsonParam.toString(), "utf-8");
entity.setContentEncoding("UTF-8");
entity.setContentType("application/json");
method.setEntity(entity);
}
HttpResponse result = httpClient.execute(method);
url = URLDecoder.decode(url, "UTF-8");
/**请求发送成功,并得到响应**/
if (result.getStatusLine().getStatusCode() == 200) {
String str = "";
try {
/**读取服务器返回过来的json字符串数据**/
str = EntityUtils.toString(result.getEntity());
if (noNeedResponse) {
return null;
}
/**把json字符串转换成json对象**/
jsonResult = JSONObject.fromObject(str);
} catch (Exception e) {
System.out.println("post请求提交失败:" + url);
}
}
} catch (IOException e) {
System.out.println("post请求提交失败:" + url);
}
return jsonResult;
}
/**
* 发送get请求
* @param url 路径
* @return
*/
public static JSONObject httpGet(String url){
//get请求返回结果
JSONObject jsonResult = null;
try {
DefaultHttpClient client = new DefaultHttpClient();
//发送get请求
HttpGet request = new HttpGet(url);
request.setHeader("servicecode","dspx");
request.setHeader("publickey","8D2E8CD9-2FEF-4971-A6D4-30616E29A453");
// request.setHeader("content-length","104");
// request.setHeader("content-type","application/json");
HttpResponse response = client.execute(request);
/**请求发送成功,并得到响应**/
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
/**读取服务器返回过来的json字符串数据**/
String strResult = EntityUtils.toString(response.getEntity());
/**把json字符串转换成json对象**/
jsonResult = JSONObject.fromObject(strResult);
url = URLDecoder.decode(url, "UTF-8");
} else {
System.out.println("post请求提交失败:" + url);
}
} catch (IOException e) {
System.out.println("post请求提交失败:" + url);
}
return jsonResult;
}
}
以上就是Httpclient的工具类,下面开始用测试一下,先简单创建一个实体类:
package com.rxt.pfp.test;
public class DetailHelper {
private String Name;
private int page;
private int rows;
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
}
实体类的字段就是API的参数根据自己的API来修改,接下来我们用main方法测试一下:
package com.rxt.pfp.test;
import net.sf.json.JSONObject;
public class Testone {
public static void main(String[] args) {
//简单的new一下实体类并赋值(里面的参数是根据我的API来测试的)
DetailHelper detailHelper=new DetailHelper();
detailHelper.setName("");
//页数
detailHelper.setPage(1);
//每页多少条
detailHelper.setRows(20);
//创建JSONObject你也可以用别的JSON解析看自己.
JSONObject json = null;
@SuppressWarnings({ "static-access", "unused" })
JSONObject js = json.fromObject(detailHelper);
System.out.println("把对象转为json" + js);
System.out.println("把对象转为json再转为字符串" + JSONObject.fromObject(detailHelper).toString());
//调用httpclient工具类并返回调用服务端API之后的数据(URL路径,JSON解析对象后的参数,不需要返回结果(false的意思就是需要))
JSONObject httpPost = HttpClientHelper.httpPost("http://36.110.19.165:8082/api/ApiMatFeaBillsNew/DetailHelper",JSONObject.fromObject(detailHelper), false);
//输出API返回的数据
System.out.println(httpPost);
//把对象转为json{"page":1,"name":"","rows":20}
//把对象转为json再转为字符串{"page":1,"name":"","rows":20}
//API返回的数据为-----{"total":1681,"rows":[{"DetailID":"390bb806-5575-40e5-bb87- f2218ed97d9b","DetailName":"小米19","ByName":"","UnitID":"2f9672ee-1ebe-4b66-b625-b9205a911f3a","UnitName":"精度","Precision":"8","OperateStandard":null,"page":0,"rows":0},{"DetailID":"7288c875-f2c0-4ae4-bae6-30b7bd43182b","DetailName":"aaa","ByName":"","UnitID":"2f9672ee-1ebe-4b66-b625-b9205a911f3a","UnitName":"精度","Precision":"8","OperateStandard":null,"page":0,"rows":0},{"DetailID":"acf4204e-fd32-43a6-b964-9c11534c1cfd","DetailName":"鸿雁插排","ByName":"t3,t1,t2","UnitID":"84f7e77b-6dc5-4f8c-b4f2-5ee348389c73","UnitName":"22","Precision":"2","OperateStandard":null,"page":0,"rows":0},{"DetailID":"50880fad-3882-4ff0-b333-15956477ee95","DetailName":"优酷路由器","ByName":"","UnitID":"EDA43213BE8E01D4E0430A49011601D4","UnitName":"个","Precision":"3","OperateStandard":null,"page":0,"rows":0},{"DetailID":"b0be62f2-1fcc-4a9e-a21f-efc22436a8e6","DetailName":"test111","ByName":"","UnitID":"2f9672ee-1ebe-4b66-b625-b9205a911f3a","UnitName":"精度","Precision":"8","OperateStandard":null,"page":0,"rows":0},{"DetailID":"816521dc-0e18-477c-b7f5-4a8412b41db7","DetailName":"不等边角钢","ByName":"哈哈哈,成熟度","UnitID":"59f7d09f-898b-4096-87f0-d09ce62fb64d","UnitName":"请问","Precision":"2","OperateStandard":null,"page":0,"rows":0},{"DetailID":"b7406c91-5fd7-4dc0-b729-3ad887d72307","DetailName":"小米6","ByName":"","UnitID":"317da1b4-835f-4ac0-892e-34fc9cc4d3c0","UnitName":"测试","Precision":"2","OperateStandard":null,"page":0,"rows":0},{"DetailID":"af12fae5-791c-4479-afc9-d9b1975997fa","DetailName":"小米12","ByName":"","UnitID":"1770212823BD035CE0530A490116035C","UnitName":"罐","Precision":"3","OperateStandard":null,"page":0,"rows":0},{"DetailID":"e6453014-6b5e-4afa-8795-0c665ab91876","DetailName":"竹马","ByName":"343","UnitID":"c8024b94-f704-4c33-ba4b-ed27525643b3","UnitName":"l","Precision":"3","OperateStandard":null,"page":0,"rows":0},{"DetailID":"7fba6bfb-e1d2-4dd4-86f1-c3df3c92c4e6","DetailName":"小米手环4","ByName":"","UnitID":"317da1b4-835f-4ac0-892e-34fc9cc4d3c0","UnitName":"测试","Precision":"2","OperateStandard":null,"page":0,"rows":0},{"DetailID":"3ec96db1-c200-4341-9eed-702fc4e450fb","DetailName":"小米手环3","ByName":"","UnitID":"317da1b4-835f-4ac0-892e-34fc9cc4d3c0","UnitName":"测试","Precision":"2","OperateStandard":null,"page":0,"rows":0},{"DetailID":"0dc8099e-0772-4908-a9b2-fe1a2288d7f7","DetailName":"品胜充电线","ByName":"充电线","UnitID":"EDA43213BE7601D4E0430A49011601D4","UnitName":"条","Precision":"3","OperateStandard":null,"page":0,"rows":0},{"DetailID":"a694b4b2-429f-4158-81d6-55e5ea9c2ddb","DetailName":"保德安钥匙","ByName":"","UnitID":"EDA43213BEA201D4E0430A49011601D4","UnitName":"把","Precision":"3","OperateStandard":null,"page":0,"rows":0},{"DetailID":"5bba79d5-951a-4178-86a5-bbe0ce6ec313","DetailName":"西部数据移动硬盘","ByName":"","UnitID":"EDA43213BE8E01D4E0430A49011601D4","UnitName":"个","Precision":"3","OperateStandard":null,"page":0,"rows":0},{"DetailID":"5f9a22f3-c79d-4649-ac11-2ac4a2b467be","DetailName":"得力碳素笔","ByName":"","UnitID":"EDA43213BE9701D4E0430A49011601D4","UnitName":"支","Precision":"3","OperateStandard":null,"page":0,"rows":0},{"DetailID":"cb4c7b71-4ef6-48a1-81d6-af71839d0c84","DetailName":"lpxi","ByName":"","UnitID":"1770212823BD035CE0530A490116035C","UnitName":"罐","Precision":"3","OperateStandard":null,"page":0,"rows":0},{"DetailID":"83fd60cc-98ff-46b8-ada5-8869baf2fadb","DetailName":"银行卡","ByName":"","UnitID":"EDA43213BEA001D4E0430A49011601D4","UnitName":"张","Precision":"3","OperateStandard":null,"page":0,"rows":0},{"DetailID":"0ab2f327-e53f-43e3-9b20-e00d49abe260","DetailName":"lpy测试","ByName":"","UnitID":"2f9672ee-1ebe-4b66-b625-b9205a911f3a","UnitName":"精度","Precision":"8","OperateStandard":null,"page":0,"rows":0},{"DetailID":"fa6b93e7-8766-4237-9e28-219f15a283c6","DetailName":"公交卡","ByName":"","UnitID":"EDA43213BE8E01D4E0430A49011601D4","UnitName":"个","Precision":"3","OperateStandard":null,"page":0,"rows":0},{"DetailID":"9fa14f00-e302-4659-b777-bdef50a613af","DetailName":"笔记本","ByName":"","UnitID":"EDA43213BE9F01D4E0430A49011601D4","UnitName":"台","Precision":"3","OperateStandard":null,"page":0,"rows":0}]}
}
}
紫色字体就是API返回的JSON数据
注:以上只是针对返回JSON格式,后续会更新返回JSON数组格式.
以上就是我个人的心得希望可以帮助大家有问题的话大家可以评论留言。
谢谢大家。
package com.rxt.pfp.test;
import net.sf.json.JSONObject;
public class Testone {
public static void main(String[] args) {
//简单的new一下实体类并赋值(里面的参数是根据我的API来测试的)
DetailHelper detailHelper=new DetailHelper();
detailHelper.setName("");
//页数
detailHelper.setPage(1);
//每页多少条
detailHelper.setRows(20);
//创建JSONObject你也可以用别的JSON解析看自己.
JSONObject json = null;
@SuppressWarnings({ "static-access", "unused" })
JSONObject js = json.fromObject(detailHelper);
System.out.println("把对象转为json" + js);
System.out.println("把对象转为json再转为字符串" + JSONObject.fromObject(detailHelper).toString());
//调用httpclient工具类并返回调用服务端API之后的数据(URL路径,JSON解析对象后的参数,不需要返回结果(false的意思就是需要))
JSONObject httpPost = HttpClientHelper.httpPost("http://36.110.19.165:8082/api/ApiMatFeaBillsNew/DetailHelper",JSONObject.fromObject(detailHelper), false);
//输出API返回的数据
System.out.println(httpPost);
}
}
- 使用Httpclient调用API的一些个人见解(返回的json)
- 关于ashx文件的使用的一些个人见解
- Httpclient 请求带Authorization(授权)的REST API 返回JSON数据
- C# 连接池(Connection Pool)的一些个人见解
- C# 连接池(Connection Pool)的一些个人见解
- 关于微机原理的一些个人见解(2)
- 个人对面向对象的一些见解
- 关于项目管理的一些个人见解
- 关于浮动的一些个人见解
- 关于benchmarksql的一些个人见解
- 关于MYSQL优化的一些个人见解
- 关于函数返回值的一些见解
- android端使用json解析调用Google Directions API返回结果的实例
- 传值调用与引用调用的个人见解
- Apache HttpComponents 的使用入门(java使用HttpClient访问Api, 使用json.org库处理json数据)
- J2ME的个人见解
- UML的个人见解
- Http的个人见解
- mysql日志满了 mysqld_safe
- Log4j,Log4j2,logback,slf4j日志学习
- 关于执行文件路径的变量 $PATH
- [caioj 1483,利用矩阵乘法解决的经典题目五]成群的细菌
- Asp.Net Core WebSocket绑定
- 使用Httpclient调用API的一些个人见解(返回的json)
- codefroces 841B Godsend
- javascript中indexOf()和lastIndexOf()查找字符串位置
- Jquery学习
- 支付宝小程序正式上线公测 附开发者工具和开发文档
- redis的API
- 剑指offer--对称的二叉树(递归)
- Dubbo之旅-启动解析-扩展spirng标签-阿里SOA服务化治理方案
- Node.js的安装和cnpm的配置