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

    xiaoxiao2021-03-25  57

    使用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.csdn.net/detail/qq_31968809/9776026
    转载请注明原文地址: https://ju.6miu.com/read-27440.html

    最新回复(0)