zoukankan      html  css  js  c++  java
  • 使用HttpClient调用接口

    一,编写返回对象

    public class HttpResult {
    // 响应的状态码
    private int code;

    // 响应的响应体
    private String body;
    get/set…
    }

    二,封装HttpClient

    package cn.xxxxxx.httpclient;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.http.NameValuePair;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpDelete;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.client.methods.HttpPut;
    import org.apache.http.client.utils.URIBuilder;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.util.EntityUtils;
    
    public class APIService {
    
        private CloseableHttpClient httpClient;
    
        public APIService() {
            // 1 创建HttpClinet,相当于打开浏览器
            this.httpClient = HttpClients.createDefault();
        }
    
        /**
         * 带参数的get请求
         * 
         * @param url
         * @param map
         * @return
         * @throws Exception
         */
        public HttpResult doGet(String url, Map<String, Object> map) throws Exception {
    
            // 声明URIBuilder
            URIBuilder uriBuilder = new URIBuilder(url);
    
            // 判断参数map是否为非空
            if (map != null) {
                // 遍历参数
                for (Map.Entry<String, Object> entry : map.entrySet()) {
                    // 设置参数
                    uriBuilder.setParameter(entry.getKey(), entry.getValue().toString());
                }
            }
    
            // 2 创建httpGet对象,相当于设置url请求地址
            HttpGet httpGet = new HttpGet(uriBuilder.build());
    
            // 3 使用HttpClient执行httpGet,相当于按回车,发起请求
            CloseableHttpResponse response = this.httpClient.execute(httpGet);
    
            // 4 解析结果,封装返回对象httpResult,相当于显示相应的结果
            // 状态码
            // response.getStatusLine().getStatusCode();
            // 响应体,字符串,如果response.getEntity()为空,下面这个代码会报错,所以解析之前要做非空的判断
            // EntityUtils.toString(response.getEntity(), "UTF-8");
            HttpResult httpResult = null;
            // 解析数据封装HttpResult
            if (response.getEntity() != null) {
                httpResult = new HttpResult(response.getStatusLine().getStatusCode(),
                        EntityUtils.toString(response.getEntity(), "UTF-8"));
            } else {
                httpResult = new HttpResult(response.getStatusLine().getStatusCode(), "");
            }
    
            // 返回
            return httpResult;
        }
    
        /**
         * 不带参数的get请求
         * 
         * @param url
         * @return
         * @throws Exception
         */
        public HttpResult doGet(String url) throws Exception {
            HttpResult httpResult = this.doGet(url, null);
            return httpResult;
        }
    
        /**
         * 带参数的post请求
         * 
         * @param url
         * @param map
         * @return
         * @throws Exception
         */
        public HttpResult doPost(String url, Map<String, Object> map) throws Exception {
            // 声明httpPost请求
            HttpPost httpPost = new HttpPost(url);
    
            // 判断map不为空
            if (map != null) {
                // 声明存放参数的List集合
                List<NameValuePair> params = new ArrayList<NameValuePair>();
    
                // 遍历map,设置参数到list中
                for (Map.Entry<String, Object> entry : map.entrySet()) {
                    params.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString()));
                }
    
                // 创建form表单对象
                UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(params, "UTF-8");
    
                // 把表单对象设置到httpPost中
                httpPost.setEntity(formEntity);
            }
    
            // 使用HttpClient发起请求,返回response
            CloseableHttpResponse response = this.httpClient.execute(httpPost);
    
            // 解析response封装返回对象httpResult
            HttpResult httpResult = null;
            if (response.getEntity() != null) {
                httpResult = new HttpResult(response.getStatusLine().getStatusCode(),
                        EntityUtils.toString(response.getEntity(), "UTF-8"));
            } else {
                httpResult = new HttpResult(response.getStatusLine().getStatusCode(), "");
            }
    
            // 返回结果
            return httpResult;
        }
    
        /**
         * 不带参数的post请求
         * 
         * @param url
         * @return
         * @throws Exception
         */
        public HttpResult doPost(String url) throws Exception {
            HttpResult httpResult = this.doPost(url, null);
            return httpResult;
        }
    
        /**
         * 带参数的Put请求
         * 
         * @param url
         * @param map
         * @return
         * @throws Exception
         */
        public HttpResult doPut(String url, Map<String, Object> map) throws Exception {
            // 声明httpPost请求
            HttpPut httpPut = new HttpPut(url);
    
            // 判断map不为空
            if (map != null) {
                // 声明存放参数的List集合
                List<NameValuePair> params = new ArrayList<NameValuePair>();
    
                // 遍历map,设置参数到list中
                for (Map.Entry<String, Object> entry : map.entrySet()) {
                    params.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString()));
                }
    
                // 创建form表单对象
                UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(params, "UTF-8");
    
                // 把表单对象设置到httpPost中
                httpPut.setEntity(formEntity);
            }
    
            // 使用HttpClient发起请求,返回response
            CloseableHttpResponse response = this.httpClient.execute(httpPut);
    
            // 解析response封装返回对象httpResult
            HttpResult httpResult = null;
            if (response.getEntity() != null) {
                httpResult = new HttpResult(response.getStatusLine().getStatusCode(),
                        EntityUtils.toString(response.getEntity(), "UTF-8"));
            } else {
                httpResult = new HttpResult(response.getStatusLine().getStatusCode(), "");
            }
    
            // 返回结果
            return httpResult;
        }
    
        /**
         * 带参数的Delete请求
         * 
         * @param url
         * @param map
         * @return
         * @throws Exception
         */
        public HttpResult doDelete(String url, Map<String, Object> map) throws Exception {
    
            // 声明URIBuilder
            URIBuilder uriBuilder = new URIBuilder(url);
    
            // 判断参数map是否为非空
            if (map != null) {
                // 遍历参数
                for (Map.Entry<String, Object> entry : map.entrySet()) {
                    // 设置参数
                    uriBuilder.setParameter(entry.getKey(), entry.getValue().toString());
                }
            }
    
            // 2 创建httpGet对象,相当于设置url请求地址
            HttpDelete httpDelete = new HttpDelete(uriBuilder.build());
    
            // 3 使用HttpClient执行httpGet,相当于按回车,发起请求
            CloseableHttpResponse response = this.httpClient.execute(httpDelete);
    
            // 4 解析结果,封装返回对象httpResult,相当于显示相应的结果
            // 状态码
            // response.getStatusLine().getStatusCode();
            // 响应体,字符串,如果response.getEntity()为空,下面这个代码会报错,所以解析之前要做非空的判断
            // EntityUtils.toString(response.getEntity(), "UTF-8");
            HttpResult httpResult = null;
            // 解析数据封装HttpResult
            if (response.getEntity() != null) {
                httpResult = new HttpResult(response.getStatusLine().getStatusCode(),
                        EntityUtils.toString(response.getEntity(), "UTF-8"));
            } else {
                httpResult = new HttpResult(response.getStatusLine().getStatusCode(), "");
            }
    
            // 返回
            return httpResult;
        }
    
    }

    三,调用接口

    package cn.xxxxxx.httpclient.test;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import org.junit.Before;
    import org.junit.Test;
    
    import cn.itcast.httpclient.APIService;
    import cn.itcast.httpclient.HttpResult;
    
    public class APIServiceTest {
    
        private APIService apiService;
    
        @Before
        public void init() {
            this.apiService = new APIService();
        }
    
        // 查询
        @Test
        public void testQueryItemById() throws Exception {
            // http://manager.aaaaaa.com/rest/item/interface/{id}
    
            String url = "http://manager.aaaaaa.com/rest/item/interface/42";
    
            HttpResult httpResult = this.apiService.doGet(url);
    
            System.out.println(httpResult.getCode());
            System.out.println(httpResult.getBody());
    
        }
    
        // 新增
        @Test
        public void testSaveItem() throws Exception {
            // http://manager.aaaaaa.com/rest/item/interface/{id}
    
            String url = "http://manager.aaaaaa.com/rest/item/interface";
    
            Map<String, Object> map = new HashMap<String, Object>();
            // title=测试RESTful风格的接口&price=1000&num=1&cid=888&status=1
            map.put("title", "测试APIService调用新增接口");
            map.put("price", "1000");
            map.put("num", "1");
            map.put("cid", "666");
            map.put("status", "1");
    
            HttpResult httpResult = this.apiService.doPost(url, map);
    
            System.out.println(httpResult.getCode());
            System.out.println(httpResult.getBody());
    
        }
    
        // 修改
    
        @Test
        public void testUpdateItem() throws Exception {
            // http://manager.aaaaaa.com/rest/item/interface/{id}
    
            String url = "http://manager.aaaaaa.com/rest/item/interface";
    
            Map<String, Object> map = new HashMap<String, Object>();
            // title=测试RESTful风格的接口&price=1000&num=1&cid=888&status=1
            map.put("title", "测试APIService调用修改接口");
            map.put("id", "44");
    
            HttpResult httpResult = this.apiService.doPut(url, map);
    
            System.out.println(httpResult.getCode());
            System.out.println(httpResult.getBody());
    
        }
    
        // 删除
        @Test
        public void testDeleteItemById() throws Exception {
            // http://manager.aaaaaa.com/rest/item/interface/{id}
    
            String url = "http://manager.aaaaaa.com/rest/item/interface/44";
    
            HttpResult httpResult = this.apiService.doDelete(url, null);
    
            System.out.println(httpResult.getCode());
            System.out.println(httpResult.getBody());
    
        }
    
    }
  • 相关阅读:
    UVA 1513
    《ArcGIS Runtime SDK for Android开发笔记》——问题集:.geodatabase创建,创建时内容缺失问题总结
    《ArcGIS Runtime SDK for Android开发笔记》——问题集:使用TextSymbol做标注显示乱码
    《ArcGIS Runtime SDK for Android开发笔记》——(7)、示例代码arcgis-runtime-samples-android的使用
    《ArcGIS Runtime SDK for Android开发笔记》——(6)、基于Android Studio的ArcGIS Android工程结构解析
    《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)
    《ArcGIS Runtime SDK for Android开发笔记》——(4)、基于Android Studio构建ArcGIS Android开发环境
    《ArcGIS Runtime SDK for Android开发笔记》——(3)、ArcGIS Runtime SDK概述
    《ArcGIS Runtime SDK for Android开发笔记》——(2)、Android Studio基本配置与使用
    《ArcGIS Runtime SDK for Android开发笔记》——(1)、Android Studio下载与安装
  • 原文地址:https://www.cnblogs.com/javaxiaoxin/p/7633017.html
Copyright © 2011-2022 走看看