HttpClient调用doGet、doPost、JSON传参及获得返回值
调用
doPost:map传参
Map<String,Object> map = new HashMap<>();
map.put("test","test");
String result = HttpClientUtils.getInstance().doPost(url, null, map);
//被调用的方法
@PostMapping("/test")
@ApiOperation("测试")
@ResponseBody
public String test(@RequestBody String requestBody){
return testService.test(requestBody);
}
//取值
String test1= requestBody.split("&")[0].split("=")[1];
String test2= requestBody.split("&")[1].split("=")[1];
doPost:JSON传参(参数含中文使用JSON传参否则乱码)获得返回值
//JSON传参获得返回值
String errmsg = HttpClientUtils.getInstance().doPostWithJson(url,json.toJSONString());
//被调用的方法
@PostMapping("/test")
@ApiOperation("测试")
@ResponseBody
public String test(@RequestBody String template){
return testService.test(template);
}
//取值为JSON格式
JSONObject templateDTO = JSONObject.parseObject(template);
//进行自己的业务操作
return "";
工具类
package com.fxkj.common.util; import com.alibaba.fastjson.JSONObject;
import com.fxkj.common.exception.BusinessException;
import com.fxkj.common.result.QCodeResult;
import org.apache.http.*;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils; import java.io.IOException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry; /**
* 分装一个http请求的工具类
*/
public class HttpClientUtils { private static HttpClientUtils instance;
CloseHttpUtil closeHttpUtil = new CloseHttpUtil();
private HttpClientUtils() {
}
public static synchronized HttpClientUtils getInstance() {
if (instance == null) {
instance = new HttpClientUtils();
}
return instance;
} /**
* <p>发送GET请求
*
* @param url GET请求地址(带参数)
* @param headerMap GET请求头参数容器
* @return 与当前请求对应的响应内容字
*/
public String doGet(String url, Map<String, Object> headerMap) {
String content = null;
CloseableHttpClient httpClient = getHttpClient();
try {
HttpGet getMethod = new HttpGet(url);
//头部请求信息
if (headerMap != null) {
Iterator iterator = headerMap.entrySet().iterator();
while (iterator.hasNext()) {
Entry entry = (Entry) iterator.next();
getMethod.addHeader(entry.getKey().toString(), entry.getValue().toString());
}
}
//发送get请求
CloseableHttpResponse httpResponse = httpClient.execute(getMethod);
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
try {
//读取内容
content = EntityUtils.toString(httpResponse.getEntity());
} finally {
httpResponse.close();
}
} else {
throw new BusinessException(httpResponse.getStatusLine().getReasonPhrase());
}
} catch (IOException ex) {
throw new BusinessException(ex.getMessage());
} finally {
try {
closeHttpClient(httpClient);
} catch (Exception e) {
throw new BusinessException(e.getMessage());
}
}
return content;
} public String doGetRequest(String url, Map<String, String> headMap, Map<String, String> paramMap) {
// 获取连接客户端工具
CloseableHttpClient httpClient = HttpClients.createDefault();
String entityStr = null;
CloseableHttpResponse response = null;
try {
/*
* 由于GET请求的参数都是拼装在URL地址后方,所以我们要构建一个URL,带参数
*/
URIBuilder uriBuilder = new URIBuilder(url);
for (Entry<String, String> param : paramMap.entrySet()) {
uriBuilder.addParameter(param.getKey(), param.getValue());
}
// 根据带参数的URI对象构建GET请求对象
HttpGet httpGet = new HttpGet(uriBuilder.build()); /*
* 添加请求头信息
*/
if (null != headMap) {
for (Entry<String, String> header : headMap.entrySet()) {
httpGet.addHeader(header.getKey(), header.getValue());
}
}
/*httpGet.addHeader("Content-Type", "application/VIID+JSON;charset=utf8");
httpGet.addHeader("User-Identify","12345678905030000000");*/
closeHttpUtil.setTimeOut(httpGet);
// 执行请求
response = httpClient.execute(httpGet);
// 获得响应的实体对象
HttpEntity entity = response.getEntity();
// 使用Apache提供的工具类进行转换成字符串
entityStr = EntityUtils.toString(entity, "UTF-8");
} catch (ClientProtocolException e) {
System.err.println("Http协议出现问题");
e.printStackTrace();
} catch (ParseException e) {
System.err.println("解析错误");
e.printStackTrace();
} catch (URISyntaxException e) {
System.err.println("URI解析异常");
e.printStackTrace();
} catch (IOException e) {
System.err.println("IO异常");
e.printStackTrace();
} finally {
// 释放连接
closeHttpUtil.close(response, httpClient);
} return entityStr;
} /**
* <p>发送POST请求
*
* @param url POST请求地址
* @param headerMap POST请求头参数容器
* @param parameterMap POST请求参数容器
* @return 与当前请求对应的响应内容字
*/
public String doPost(String url, Map<String, Object> headerMap, Map<String, Object> parameterMap) {
String content = null;
CloseableHttpClient httpClient = getHttpClient();
try {
HttpPost postMethod = new HttpPost(url);
postMethod.setHeader("Content-Type", "application/json;charset=utf-8");
postMethod.setHeader("Accept", "application/json;charset=utf-8");
//头部请求信息
if (headerMap != null) {
Iterator iterator = headerMap.entrySet().iterator();
while (iterator.hasNext()) {
Entry entry = (Entry) iterator.next();
postMethod.addHeader(entry.getKey().toString(), entry.getValue().toString());
}
}
if (parameterMap != null) {
Iterator iterator = parameterMap.keySet().iterator();
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
while (iterator.hasNext()) {
String key = (String) iterator.next();
nvps.add(new BasicNameValuePair(key, String.valueOf(parameterMap.get(key))));
}
postMethod.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
} CloseableHttpResponse httpResponse = httpClient.execute(postMethod);
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
try {
//读取内容
content = EntityUtils.toString(httpResponse.getEntity());
} finally {
httpResponse.close();
}
} else {
throw new BusinessException(httpResponse.getStatusLine().getReasonPhrase());
}
} catch (IOException ex) {
throw new BusinessException(ex.getMessage());
} finally {
try {
closeHttpClient(httpClient);
} catch (Exception e) {
throw new BusinessException(e.getMessage());
}
}
return content;
} public static String doPostWithJson(String url, String json) {
String returnValue = JsonUtils.write(QCodeResult.fail("接口异常!"));
CloseableHttpClient httpClient = HttpClients.createDefault();
ResponseHandler<String> responseHandler = new BasicResponseHandler();
try {
//第一步:创建HttpClient对象
httpClient = HttpClients.createDefault(); //第二步:创建httpPost对象
HttpPost httpPost = new HttpPost(url);
RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(30000)
.setSocketTimeout(30000).setConnectTimeout(10000).build();
//第三步:给httpPost设置JSON格式的参数
StringEntity requestEntity = new StringEntity(json, "utf-8");
requestEntity.setContentEncoding("UTF-8");
httpPost.setHeader("Content-type", "application/json");
httpPost.setEntity(requestEntity);
httpPost.setConfig(requestConfig); //第四步:发送HttpPost请求,获取返回值
returnValue = httpClient.execute(httpPost, responseHandler); //调接口获取返回值时,必须用此方法
// System.out.println("请求返回:" + returnValue);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
httpClient.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//第五步:处理返回值
return returnValue;
} public CloseableHttpClient getHttpClient() {
return HttpClients.createDefault();
} private void closeHttpClient(CloseableHttpClient client) throws IOException {
if (client != null) {
client.close();
}
} public static void get(String url) {
HttpGet request = new HttpGet(url);
try {
HttpResponse response = HttpClients.createDefault().execute(request);
if (response.getStatusLine().getStatusCode() == 200) {
EntityUtils.toString(response.getEntity());
}
} catch (Exception e) { }
}
}
HttpClient调用doGet、doPost、JSON传参及获得返回值的更多相关文章
- C# 多线程编程,传参,接受返回值
C# 多线程编程,传参,接受返回值 今天将多线程的知识有回顾了下,总结了几点: 新建一个线程(无参数,无返回值) Thread th = new Thread(new ThreadStart(Prin ...
- Java调用动态链接库so文件(传参以及处理返回值问题)
刚来到公司,屁股还没坐稳,老板把我叫到办公室,就让我做一个小程序.我瞬间懵逼了.对小程序一窍不通,还好通过学习小程序视频,两天的时间就做了一个云开发的小程序,但是领导不想核心的代码被别人看到,给了我一 ...
- HttpClient 调用WebAPI时,传参的三种方式
public void Post() { //方法一,传json参数 var d = new { username = " ", password = " ", ...
- C#打开php链接传参然后接收返回值
php代码 一.php <?php header("Content-Type:text/html;charset=UTF-8"); $u=$_POST['zdupdate'] ...
- json传参应用
json传参应用 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言.易于人阅 ...
- ASP.NET WebAPI RC 竟然不支持最常用的json传参
壮士断腕(WCF Web API),为的是 ASP.NET Web API 的横空出世,再加上它的开放(开源),于是对之产生了一点点痴情,并写下了HttpClient + ASP.NET Web AP ...
- SpringBoot 处理 POST Json 传参枚举
在 Spring 框架中对枚举类型的序列化/反序列化是有限制的. 假设如下面这样在某些情况下就不能正常工作: 123456789 public enum PayChannelEnum implemen ...
- asp.net 通过ajax方式调用webmethod方法使用自定义类传参及获取返回参数
实体类 public class User { public int Id { get; set; } public string Name { get; se ...
- json传参 js前端和java后端 的简单例子
下面讲解了从前端js对象-->json字符串-->java字符串---->java map的过程 1,初始化js对象 var param = {}; param.krel = kre ...
随机推荐
- QT. 学习之路 三
添加一个动作: Qt 使用QAction类作为动作.QAction包含了图标.菜单文字.快捷键.状态栏文字.浮动帮助等信息.当把一个QAction对象添加到程序中时,Qt 自己选择使用哪个属性来显示, ...
- ssh服务两句话
ssh服务采用"非对称密钥系统":主要通过两把不一样的公钥和密钥来进行加密与解密的过程 公钥(Public Key):提供给远程主机进行数据加密 私钥(Private Key):远 ...
- ti
一.选择题DCBCDCDACAACBBABACBDCBBDA二.简答题(每小题5分,共20分)1. 1)简洁紧凑,灵活方便2)运算符丰富3)数据类型丰富4)C语言是结构化语言5)语法限制较少,程序设计 ...
- java集合(5)-List集合
序章 List集合是一个元素有序且可以重复的集合,每个元素对应一个索引,类似于数组的方式,默认是按照添加顺序,所以第一次添加元素索引为0,第二次为1.... 一 Java8改进的List接口和List ...
- CRUD搬砖两三年了,怎么阅读Spring源码?
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 连读同事写的代码都费劲,还读Spring? 咋的,Spring 很难读! 这个与我们码农朝夕 ...
- 深入GraphQL 的使用语法
深入GraphQL 的使用语法 对于GraphQL 的使用语法在上一节中已经大概介绍了基本的使用方式了,这一篇将会对上一篇入门做拓展,努力将所有的使用语法都覆盖到. 1. 终端语法 首先是介绍在前端查 ...
- 02_Java基础类型和包装类型
基本数据类型 包装类名称 所占字节数 默认值 byte Byte 1 0 short Short 2 0 Int Integer 4 0 long Long 8 0L double Double 8 ...
- 使用Pycharm创建Django项目无法创建app.
Python3.7使用Django1.11.7创建Django项目报以下错误时: 在使用Pycharm创建Django项目报以下错误时: Traceback (most recent call las ...
- odoo里面的一些ORM操作
案例0001sale_obj=self.env['sale.order'].browse(k)通过browse查找对象找到对象里面的 sale_obj.name browse 获取一个数据库id或一个 ...
- Vue--之调试
vue.文件的调试 方法:在chrome浏览器中,F12,在Sources中ctrl+F 查找leftMenu.vue, 打断点,F8完成加载