您的位置:首页 > 理论基础 > 计算机网络

使用Httpclient调用url方式访问spring mvc中的controller并传json值与返回

2017-03-11 12:22 489 查看
使用Httpclient调用url方式访问spring mvc中的controller并传json值与返回
1.前面一篇博客已经提到使用HttpURLConnection调用url,本文讲的是使用Httpclient方法。
2.Httpclient发送数据
package com.zl.test3;

import java.io.IOException;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
*
* @author zenglong
*
* @Description: HttpClient 方式推数据到接口平台
*
*/
public class HttpClientSend {
private static Log log = LogFactory.getLog(HttpClientSend.class);

/**
* 定义编码格式 UTF-8
*/
public static final String URL_PARAM_DECODECHARSET_UTF8 = "UTF-8";

/**
* 定义编码格式 GBK
*/
public static final String URL_PARAM_DECODECHARSET_GBK = "GBK";

private static final String URL_PARAM_CONNECT_FLAG = "&";

private static final String EMPTY = "";

private static MultiThreadedHttpConnectionManager connectionManager = null;

private static int connectionTimeOut = 250000;

private static int socketTimeOut = 25000;

private static int maxConnectionPerHost = 20;

private static int maxTotalConnections = 20;

private static HttpClient client;

static{
connectionManager = new MultiThreadedHttpConnectionManager();
connectionManager.getParams().setConnectionTimeout(connectionTimeOut);
connectionManager.getParams().setSoTimeout(socketTimeOut);
connectionManager.getParams().setDefaultMaxConnectionsPerHost(maxConnectionPerHost);
connectionManager.getParams().setMaxTotalConnections(maxTotalConnections);
client = new HttpClient(connectionManager);
}

/**
* POST方式提交数据
* @param url
* 			待请求的URL
* @param params
* 			要提交的数据
* @param enc
* 			编码
* @return
* 			响应结果
* @throws IOException
* 			IO异常
*/
public static String URLPost(String url, String enc){

String response = EMPTY;
PostMethod postMethod = null;
try {
postMethod = new PostMethod(url);
postMethod.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=" + enc);

//			String  jsonStr="{"
//    		  		+ "\"bgyprogressuuid\": \"aabc891fc62f41728497da2904294e29\","
//    		  		+ "\"bgysupplier\": \"供应商名称3\","
//    				 + " \"bgyitemname\": \"项目公司名称3\","
//    				    + "\"bgyitemcode\": \"000
4000
3\","
//    				    + "\"bgyarea\": \"佛山区域3\","
//    				    + "\"bgycontractname\": \"合同名称\","
//    				    + "\"bgycontractno\": \"合同编号003\","
//    				    + "\"bgypayamount\": 888.989,"
//    				    + "\"bgysupplierbank\": \"供应商开户行:中国银行\","
//    				    + "\"bgysupplieraccount\": \"供应商账号:88888989989\","
//    				    + "\"bgysupplieraccountname\": \"收方户名:佛山碧桂园\","
//    				    + "\"bgypaystatus\": false,"
//    				    + "\"dr\": 0}";
String jsonStr="GhfC/ne0gV/HQNOq0FKeXZcWr6z73qbzS8K7x0a0Ks2/ijtkJA9puA9gnAw+i2ZV7P8AcObNFU/SrMj/84f9irwILlbS86eaTCW714QWZMRSkeOhVNdyxWj6q8lCU4utXDpbN31Z2cGgp2bu7of03QvambBizcE8zSmcUYV6giizueZZVWyoTlO5i/SY77MQqE89O5/glGhUxKioZa5PZBue53IYIRHQX2yhFBy7S4Hz3OODVEeiugfQ6TYMen0H61awTJbGkV4f7sERb/CQgm97AXNEUUKRMRp+SNCT2rMlugJK3U3kgs3OELTGCu4wOHmvmwItVfxSvOeurclcU5TdEEvCqBHEHnPL6riLn8hrEQah2KGI0jQM7cYO0PBH+AlXMGP322X++F+kKkyyHmaP+0g8wCe0GZAL8l9KNkzcJdSKY3JVMffq8MY+bN6NFlBIiVaXuWn0Ubpo3wNZiRXPx1U64aA+ycoEFgxOqzMRuqtZJZ/YLvXcoXFf0Po5s6evH4NALlYBpLSuxV6w7TDmKjO00tQed8eqRbNMM2xWvJzoQDEW3JaQWJ0ZQ9bZ/NXTei1/8Fh/HqZ/hJyfqls0OdUNbTGgxkPlNONbzOWtWm4PCqrStLu/u1hZGCO9DkOJCLc/FY8vOhKyS2sdCj0vuk6DQmApOjFUXEf+ono=";;// 发送请求参数
RequestEntity requestEntity = new StringRequestEntity(jsonStr,"text/xml","UTF-8");
postMethod.setRequestEntity(requestEntity);

//执行postMethod
int statusCode = client.executeMethod(postMethod);
if(statusCode == HttpStatus.SC_OK) {
response = postMethod.getResponseBodyAsString();
//读取内容
byte[] responseBody = postMethod.getResponseBody();
//处理内容
String data = new String(responseBody);
System.out.println(data);
}else{
log.error("响应状态码 = " + postMethod.getStatusCode());
}
}catch(HttpException e){
log.error("发生致命的异常,可能是协议不对或者返回的内容有问题", e);
e.printStackTrace();
}catch(IOException e){
log.error("发生网络异常", e);
e.printStackTrace();
}finally{
if(postMethod != null){
postMethod.releaseConnection();
postMethod = null;
}
}

return response;
}

public static void main(String[] args) {
String url = "http://127.0.0.1:8080/abs/Progressinfo/sendProgressinfo";
String enc = "utf-8";
URLPost(url, enc);
}
}

2.2 controller层spring获取数据
/**
* 明源推数据到平台
* @return
* @throws IOException
*/
@RequestMapping(value = "/sendProgressinfo")
public void sendProgressinfo(HttpServletResponse response,HttpServletRequest request) throws IOException {
responseUtil(response);
String paramString = null;
StringBuffer bfBuffer = new StringBuffer();
InputStream is = request.getInputStream();
InputStreamReader reader = new InputStreamReader(is,"utf-8");
BufferedReader br = new BufferedReader(reader);
while((paramString=br.readLine())!=null)
{
bfBuffer.append(paramString);
}
String jsonStr=bfBuffer.toString();
//		ProgressinfoEntity  proEntity=new ProgressinfoEntity
//				("aabc891fc62f41728497da2904294e28","供应商名称2","项目公司名称2","002","佛山区域2",
//						"合同名称","合同编号002",888.989,"供应商开户行:中国银行2","供应商账号2:88888989989","收方户名:佛山碧桂园",false,"2017-01-18 20:18:09");
//		JavaType javaType = getCollectionType(ArrayList.class, ProgressinfoEntity.class); //批量转换为list
//		mapper.readValue(jsonStr, javaType);   //这里不需要强制转换
ObjectMapper mapper=new ObjectMapper();
if (jsonStr!=null && jsonStr.trim().length()>0) {
ProgressinfoEntity proEntity = mapper.readValue(jsonStr, ProgressinfoEntity.class);//一条
proEntity.setLasttime(DateUtil.formatDate());
ProgressinfoEntity s = proService.sendProgressinfo(proEntity);
response.getWriter().write("secceed");
}else {
response.getWriter().write("failed");
}
}


3.Httpclient获取数据:
package com.zl.test3;

import java.io.IOException;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
*
* @author zenglong
*
* @Description: HttpClient方式到接口平台获得数据
*
*/
public class HttpClientGet {
public static void main(String[] args) {
String url = "http://127.0.0.1:8080/abs/getProgressinfo";
String params="lasttime=2017-01-16";
String enc = "utf-8";
//        URLPost(url, enc);
URLGet(url, params, enc);
}

private static Log log = LogFactory.getLog(HttpClientGet.class);

/**
* 定义编码格式 UTF-8
*/
public static final String URL_PARAM_DECODECHARSET_UTF8 = "UTF-8";

/**
* 定义编码格式 GBK
*/
public static final String URL_PARAM_DECODECHARSET_GBK = "GBK";

private static final String URL_PARAM_CONNECT_FLAG = "&";

private static final String EMPTY = "";

private static MultiThreadedHttpConnectionManager connectionManager = null;

private static int connectionTimeOut = 250000;

private static int socketTimeOut = 25000;

private static int maxConnectionPerHost = 20;

private static int maxTotalConnections = 20;

private static HttpClient client;

static{
connectionManager = new MultiThreadedHttpConnectionManager();
connectionManager.getParams().setConnectionTimeout(connectionTimeOut);
connectionManager.getParams().setSoTimeout(socketTimeOut);
connectionManager.getParams().setDefaultMaxConnectionsPerHost(maxConnectionPerHost);
connectionManager.getParams().setMaxTotalConnections(maxTotalConnections);
client = new HttpClient(connectionManager);
}

/**
* POST方式提交数据
* @param url
* 			待请求的URL
* @param params
* 			要提交的数据
* @param enc
* 			编码
* @return
* 			响应结果
* @throws IOException
* 			IO异常
*/
public static String URLPost(String url, String enc){

String response = EMPTY;
PostMethod postMethod = null;
try {
postMethod = new PostMethod(url);
postMethod.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=" + enc);
//执行postMethod
int statusCode = client.executeMethod(postMethod);
if(statusCode == HttpStatus.SC_OK) {
response = postMethod.getResponseBodyAsString();
//读取内容
byte[] responseBody = postMethod.getResponseBody();
//处理内容
String data = new String(responseBody);
System.out.println(data);
}else{
log.error("响应状态码 = " + postMethod.getStatusCode());
}
}catch(HttpException e){
log.error("发生致命的异常,可能是协议不对或者返回的内容有问题", e);
e.printStackTrace();
}catch(IOException e){
log.error("发生网络异常", e);
e.printStackTrace();
}finally{
if(postMethod != null){
postMethod.releaseConnection();
postMethod = null;
}
}

return response;
}

/**
* GET方式提交数据
* @param url
* 			待请求的URL
* @param params
* 			要提交的数据
* @param enc
* 			编码
* @return
* 			响应结果
* @throws IOException
* 			IO异常
*/
public static String URLGet(String url, String params, String enc){

String response = EMPTY;
GetMethod getMethod = null;
StringBuffer strtTotalURL = new StringBuffer(EMPTY);

if(strtTotalURL.indexOf("?") == -1) {
strtTotalURL.append(url).append("?").append(params);
} else {
strtTotalURL.append(url).append("&").append(params);
}
log.debug("GET请求URL = \n" + strtTotalURL.toString());

try {
getMethod = new GetMethod(strtTotalURL.toString());
getMethod.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=" + enc);
//执行getMethod
int statusCode = client.executeMethod(getMethod);
if(statusCode == HttpStatus.SC_OK) {
response = getMethod.getResponseBodyAsString();
//读取内容
byte[] responseBody = getMethod.getResponseBody();
//处理内容
String data = new String(responseBody);
System.out.println(data);
}else{
log.debug("响应状态码 = " + getMethod.getStatusCode());
}
}catch(HttpException e){
log.error("发生致命的异常,可能是协议不对或者返回的内容有问题", e);
e.printStackTrace();
}catch(IOException e){
log.error("发生网络异常", e);
e.printStackTrace();
}finally{
if(getMethod != null){
getMethod.releaseConnection();
getMethod = null;
}
}

return response;
}

}
3.2 controller层中spring根据条件并返回数据
/**
* 前海调用进度款申请表
* @return
* @throws IOException
*/
@RequestMapping(value = "/getProgressinfo")
public void  getProgressinfo(HttpServletResponse response,HttpServletRequest request) throws IOException {
responseUtil(response);
String lasttime=(String) request.getParameter("lasttime");
System.out.println("lasttime为:====="+lasttime);
if (lasttime!=null && lasttime.trim().length()>0) {
List<ProgressinfoEntity> res = proService.getProgressinfo(lasttime);
ObjectMapper mapper=new ObjectMapper();
String jsonStr = mapper.writeValueAsString(res);
response.getWriter().write(jsonStr);
}else {
response.getWriter().write("failed");
}
}

public void responseUtil(HttpServletResponse response){
response.setContentType("text/plain;charset=UTF-8");
response.setCharacterEncoding("utf-8");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
}


4.源代码下载地址:
点击打开链接 http://download.csdn.net/detail/qq_31968809/9776026
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐