java開發之路2016.12.26

來源:互聯網
上載者:User

標籤:private   方式   ade   date   for   rac   png   定義   back   

本人初入門徑。代碼略顯粗糙,歡迎指點改正!

最近在做公司的項目的時候,需要和其他公司進行業務上的對接,對方直接扔過來一個協議用來開發,最近稍微看了一下,寫了一個通過協議擷取資料的方法

對方的協議內容部分如下:

根據協議上的內容來看是可以通過http的方式來擷取對應的業務資料的,但是發送的參數和返回的資料都是用的json格式,編碼按照UTF-8的格式

因而寫了以下一小段內容

private BackData getDataFromDH(String method,String param){        URL url=null;
    //自訂實體類,我自訂的是和對方返回的json對應的類型 BackData data=null; try {
    //此處參數baseurl、method、param合成一個完整的url 如 http://192.168.29.200:8080/dahuaIS/rest/statistic/picrecord/參數
  //這裡的參數param在後文會特別說明
url=new URL("http://"+baseurl+method+param); HttpURLConnection connection = (HttpURLConnection) url.openConnection();//擷取串連
        //這裡的set方法主要設定一些要求標頭的參數 connection.setRequestMethod("GET");//佈建要求方式 connection.setRequestProperty("Accept", "application/json"); connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("authorization",authorization);//按照對方要求設定的相關認證內容 connection.connect(); Gson gson=new GsonBuilder().create();//這裡使用到了google 的Gson.jar 可以方便地把對象和json格式互轉 InputStream is = connection.getInputStream(); InputStreamReader r=new InputStreamReader(is,"utf-8"); BufferedReader br=new BufferedReader(r); String s = br.readLine();//這裡偷懶直接讀了一個完整的字串,因為返回的json實際上也是一個完整的行字串 data = gson.fromJson(s, BackData.class);
        //最後關閉流 br.close(); r.close(); is.close(); connection.disconnect();//中斷連線 } catch (MalformedURLException e) { //以下異常具體情況具體處理 e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return data; }

以上基本上就是擷取資料並且轉換成實體類的一個小流程

下面就是對實體類構建、param參數的說明

實體類:

對方給出的查詢條件:

q={
"devChnId": "[email protected]$1$0$0",
"startDate": "2015-12-11 17:01:10",
"endDate ":"2015-12-12 17:01:10"
}

我構建的查詢參數實體類如下:

public class SearchParam {    private String devChnId;    private String startDate;    private String endDate;        public String getDevChnId() {        return devChnId;    }    public void setDevChnId(String devChnId) {        this.devChnId = devChnId;    }    public String getStartDate() {        return startDate;    }    public void setStartDate(String startDate) {        this.startDate = startDate;    }    public String getEndDate() {        return endDate;    }    public void setEndDate(String endDate) {        this.endDate = endDate;    }    @Override    public String toString() {        String str="";        try {            str=URLEncoder.encode("{\"devChnId\":\""+devChnId+"\",\"startDate\":\""+startDate+"\",\"endDate\":\""+endDate+"\"}", "UTF-8");        } catch (UnsupportedEncodingException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return "q="+str;    }    }

上述實體類代碼中toString方法的重寫就是對param參數的一些特殊設定

在字串中 “ 需要用\"轉義,具體需要轉義的符號可以查詢<a href="http://blog.csdn.net/lanchengxiaoxiao/article/details/41893925">相關資料</a>

我這裡的寫法其實比較傻的,也可以說是比較原始的,之前提到的Gson可以把實體類構建成json格式的

用到Gson可以採用以下這種寫法,Gson構建的類實際上輸出就是一個String字串

public String toString(){        return new GsonBuilder().create().toJson(this);    }
//以下是測試返回結果
{"devChnId":"#[email protected]","startDate":"2011-12-15 12:23:43","endDate":"2016-12-12 12:02:24"}

但是這樣只是獲得了json格式的參數,在進行get方式進行請求的時候,直接這樣的話會返回400錯誤,這是因為url參數中可能有一些識別不了的字元

所以需要使用URLEncoder.encode()進行url編碼,但是首碼“q="不需要進行編碼,以防識別不出是get方式的參數

 

java開發之路2016.12.26

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.