天天看點

Get傳遞參數時發生java.lang.IllegalArgumentException異常

功能:售後位址的驗證 當使用者點選某位址時,将位址資訊傳遞到背景,再從背景調用接口,判斷使用者位址填寫是否正确

解析位址功能的實作層代碼(簡化過的)

publicvoidaddressResolution(String address, String id) {

       String addresses ="{\"id\":\""+ id + "\",\"address\":\""+ address +"\"}";//将傳遞的兩個值指派給string

    try{

        String response=HttpClientUtil.doGetUrl(http://baidu.com?addresses=["+ addresses +"]");//注意:在發送請求時一定要填寫http://或https://

           } catch (Exception e) {

        e.printStackTrace();

    }

}

在執行之後發生的異常資訊

java.lang.IllegalArgumentException: Illegal character in query at index 82: http://10.138.225.240:10061/internalapi/hsi/analyticSuperMapAPI/fendan?addresses=[{"id":"111","address":"山東省日照市岚山區"}]

at java.net.URI.create(URI.java:852)

at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:66)

.....................................................

2018-04-19 09:09:10.575 ERROR 7892 --- [tp1021786447-94] c.h.h.e.s.w.WorkOrderServiceImpl         : 位址分單異常資訊:java.lang.IllegalArgumentException: Illegal character in query at index 82: http://10.138.225.240:10061/internalapi/hsi/analyticSuperMapAPI/fendan?addresses=[{"id":"111","address":"山東省日照市岚山區"}]

異常原因:更确切的講,當URL位址裡包含非西歐字元的字元串時,浏覽器都會将這些非西歐字元串轉換成application/x-www-form-urlencoded MIME 字元串。在開發過程中,我們可能涉及将普通字元串和這種特殊字元串的相關轉換,這就需要使用URLDecoder和URLEncoder類進行實作,其中:

URLDecoder類包含一個decode(String s,String enc)靜态方法,它可以将application/x-www-form-urlencoded MIME字元串轉成普通字元串;

URLEncoder類包含一個encode(String s,String enc)靜态方法,它可以将普通字元串轉換成application/x-www-form-urlencoded MIME字元串。

是以在這裡使用URLEncoder方法

導包 import java.net.URLEncoder;

publicvoidaddressResolution(String address, String id) {

    String addresses ="{\"id\":\""+ id + "\",\"address\":\""+ address +"\"}";

    String addresses =URLEncoder.encode(param);  //url中有漢字或特殊字元(非字母和數字的字元),實作 轉碼

    try{

        String response = HttpClientUtil.doGetUrl(http://baidu.com?addresses=["+ addresses +"]");

           } catch (Exception e) {

        e.printStackTrace();

            }

}

執行成功

Get傳遞參數時發生java.lang.IllegalArgumentException異常
Get傳遞參數時發生java.lang.IllegalArgumentException異常
Get傳遞參數時發生java.lang.IllegalArgumentException異常

繼續閱讀