使用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);
    }
}



原创粉丝点击