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

本文介绍如何使用HttpClient与SpringMVC进行数据交互,包括发送JSON数据和接收数据的方法,并展示了具体的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用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\": \"0003\","
//    				    + "\"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.youkuaiyun.com/detail/qq_31968809/9776026


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值