一。背景
公司的项目比较老。去调用其他项目的controller 的时候,需要用到httpclient中的executeMethod的方法去发送http请求
下面就是两种参数的请求示例
1.表单的请求:
java代码:
HttpClient httpClient = new HttpClient();
HttpConnectionManagerParams managerParams = httpClient.getHttpConnectionManager().getParams();// 获得管理参数
managerParams.setConnectionTimeout(60000);// 设置连接超时时间(单位毫秒)
managerParams.setSoTimeout(120000);// 设置读数据超时时间(单位毫秒)
httpClient.getParams().setParameter("http.protocol.content-charset", "UTF-8");
log.info("===========数据发送地址=============="+url);
PostMethod postMethod = new PostMethod(url);
// 填入各个表单域的值
NameValuePair[] data = {
new NameValuePair("userId", userId),
new NameValuePair("date", date)
};
postMethod.setRequestBody(data);// 将表单的值放入postMethod中
int statusCode = httpClient.executeMethod(postMethod);// 执行postMethod
log.info("单笔============http响应状态:"+statusCode+"================");
controller接收:
@RequestMapping(value = VERSION + "hello", method = RequestMethod.POST)
public String putoutNotice(@ModelAttribute TestVO vos) throws Exception {
Map map = new HashMap<>();
}
2.json
HttpClient httpClient = new HttpClient();
HttpConnectionManagerParams managerParams = httpClient.getHttpConnectionManager().getParams();// 获得管理参数
managerParams.setConnectionTimeout(60000);// 设置连接超时时间(单位毫秒)
managerParams.setSoTimeout(120000);// 设置读数据超时时间(单位毫秒)
httpClient.getParams().setParameter("http.protocol.content-charset", "UTF-8");
log.info("===========数据发送地址=============="+url);
PostMethod postMethod = new PostMethod(url);
String initiativeLoanResultVOsStr = JSON.toJSONString(putOutResultVOS);//把参数转为json(putOutResultVOS是list对象)
RequestEntity se = new StringRequestEntity(initiativeLoanResultVOsStr, "application/json", "UTF-8");
postMethod.setRequestEntity(se);
int statusCode = httpClient.executeMethod(postMethod);// 执行postMethod
log.info("单笔============http响应状态:"+statusCode+"================");
controller
@RequestMapping(value = VERSION + "/hello", method = RequestMethod.POST)
public String putoutNotice(@RequestBody List<TestVO> vos) throws Exception {
Map map = new HashMap<>();
}
三。http连接最后要关闭资源
示例:
HttpClient httpClient = new HttpClient();
PostMethod postMethod = new PostMethod(pay_url);
try{
HttpConnectionManagerParams managerParams = httpClient.getHttpConnectionManager().getParams();// 获得管理参数
managerParams.setConnectionTimeout(60000);// 设置连接超时时间(单位毫秒)
managerParams.setSoTimeout(120000);// 设置读数据超时时间(单位毫秒)
httpClient.getParams().setParameter("http.protocol.content-charset", "UTF-8");
log.info("===========数据发送地址=============="+pay_url);
// 填入各个表单域的值
NameValuePair[] data = {
new NameValuePair("userId", userId),
new NameValuePair("date", date)
};
postMethod.setRequestBody(data);// 将表单的值放入postMethod中
int statusCode = httpClient.executeMethod(postMethod);// 执行postMethod
log.info("单笔============http响应状态:"+statusCode+"================");
}catch(Exception e){
}finally{
//关闭资源
close(httpClient, postMethod);
}
public static void close(HttpClient httpClient, PostMethod postMethod) {
//关闭数据流关闭http连接
if (postMethod != null) postMethod.releaseConnection();
if (null != httpClient) {
SimpleHttpConnectionManager manager = (SimpleHttpConnectionManager) httpClient
.getHttpConnectionManager();
if (null == manager) {
httpClient.getHttpConnectionManager().closeIdleConnections(0);
} else {
manager.shutdown();
}
}
}
附件:学习地址: