首页 > 开发 > Java > 正文

使用HttpClient调用接口的实例讲解

2024-07-13 10:12:31
字体:
来源:转载
供稿:网友

一,编写返回对象

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>();  //  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>();  //  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()); }}

以上这篇使用HttpClient调用接口的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持VeVb武林网。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表