1. 程式人生 > >使用HttpURLConnection呼叫url方式訪問spring mvc中的controller並傳json值與返回

使用HttpURLConnection呼叫url方式訪問spring mvc中的controller並傳json值與返回

package com.zl.test2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;

import com.zl.test1.HttpRequestUtil;

/**
 * 
 * @author zenglong
 *
 * @Description: 往介面平臺推送json資料
 *
 */
public class HttpUrlSend {
	 static String proxyHost = "127.0.0.1";
	  static int proxyPort = 8080;
	  
	  /**
	     * 向指定URL傳送GET方法的請求
	     * 
	     * @param url
	     *            傳送請求的URL
	     * @param param
	     *            請求引數,請求引數應該是 name1=value1&name2=value2 的形式。
	     * @return URL 所代表遠端資源的響應結果
	     */
	    public static String sendGet(String url, String param) {
	        String result = "";
	        BufferedReader in = null;
	        try {
//	            String urlNameString = url + "?" + param;
	        	
	            URL realUrl = new URL(url);
	            // 開啟和URL之間的連線
	            URLConnection connection = realUrl.openConnection();
	            // 設定通用的請求屬性
	            connection.setRequestProperty("accept", "*/*");
	            connection.setRequestProperty("connection", "Keep-Alive");
	            connection.setRequestProperty("user-agent",
	                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
	            // 建立實際的連線
	            connection.setDoOutput(true);
	            connection.connect();
	            // 獲取所有響應頭欄位
//	            Map<String, List<String>> map = connection.getHeaderFields();
//	            // 遍歷所有的響應頭欄位
//	            for (String key : map.keySet()) {
//	                System.out.println(key + "--->" + map.get(key));
//	            }
	            
	            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}";
	            
	            OutputStream  out = connection.getOutputStream();     
	            // 寫入請求的字串
	            out.write((jsonStr.toString()).getBytes());
	            out.flush();
	            out.close();
	            // 定義 BufferedReader輸入流來讀取URL的響應
	            in = new BufferedReader(new InputStreamReader(
	                    connection.getInputStream()));
	            String line;
	            while ((line = in.readLine()) != null) {
	                result += line;
	            }
	        } catch (Exception e) {
	            System.out.println("傳送GET請求出現異常!" + e);
	            e.printStackTrace();
	        }
	        // 使用finally塊來關閉輸入流
	        finally {
	            try {
	                if (in != null) {
	                    in.close();
	                }
	            } catch (Exception e2) {
	                e2.printStackTrace();
	            }
	        }
	        return result;
	    }
	    
	    /**
	     * 向指定 URL 傳送POST方法的請求
	     * 
	     * @param url
	     *            傳送請求的 URL
	     * @param param
	     *            請求引數,請求引數應該是 name1=value1&name2=value2 的形式。
	     * @param isproxy
	     *               是否使用代理模式
	     * @return 所代表遠端資源的響應結果
	     */
	    public static String sendPost(String url, String param,boolean isproxy) {
	        OutputStreamWriter out = null;
	        BufferedReader in = null;
	        String result = "";
	        try {
	            URL realUrl = new URL(url);
	            HttpURLConnection conn = null;
	            if(isproxy){//使用代理模式
	                @SuppressWarnings("static-access")
	                Proxy proxy = new Proxy(Proxy.Type.DIRECT.HTTP, new InetSocketAddress(proxyHost, proxyPort));
	                conn = (HttpURLConnection) realUrl.openConnection(proxy);
	            }else{
	                conn = (HttpURLConnection) realUrl.openConnection();
	            }
	            // 開啟和URL之間的連線
	             
	            // 傳送POST請求必須設定如下兩行
	            conn.setDoOutput(true);
	            conn.setDoInput(true);
	            conn.setRequestMethod("POST");    // POST方法
	             
	             
	            // 設定通用的請求屬性
	             
	            conn.setRequestProperty("accept", "*/*");
	            conn.setRequestProperty("connection", "Keep-Alive");
	            conn.setRequestProperty("user-agent",
	                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
	            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
	             
	            conn.connect();
	             
	            // 獲取URLConnection物件對應的輸出流
	            out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
	            
	            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}";
	            
	            // 傳送請求引數
	            out.write(jsonStr);
	            // flush輸出流的緩衝
	            out.flush();
	            // 定義BufferedReader輸入流來讀取URL的響應
	            in = new BufferedReader(
	                    new InputStreamReader(conn.getInputStream()));
	            String line;
	            while ((line = in.readLine()) != null) {
	                result += line;
	            }
	        } catch (Exception e) {
	            System.out.println("傳送 POST 請求出現異常!"+e);
	            e.printStackTrace();
	        }
	        //使用finally塊來關閉輸出流、輸入流
	        finally{
	            try{
	                if(out!=null){
	                    out.close();
	                }
	                if(in!=null){
	                    in.close();
	                }
	            }
	            catch(IOException ex){
	                ex.printStackTrace();
	            }
	        }
	        return result;
	    } 
	    
	    public static void main(String[] args) {
	    	/**
	    	 * post 方式推資料到平臺
	    	 */
	        String url = "http://127.0.0.1:8080/abs/sendProgressinfo";
	        String para = "";
	        String sr=HttpUrlSend.sendPost(url,para,true);
	    	/**
	    	 * get 方式推資料到平臺
	    	 */
//	        String url2 = "http://127.0.0.1:8080/abs/sendProgressinfo";
//	        String para2 = "";
//	        String sr=HttpUrlSend.sendGet(url2,para2);
	        System.out.println(sr);
		}
}
3.1  controller中讀取json資料並進行相關操作: