java后台開發傳輸亂碼&&接口post傳參失敗


起因:

前幾天遇到的問題,才有時間記錄,需求:本地生成xml形式的字符串以參數形式用post方法傳送到對方的固定接口;

這個需求寫的時候感覺很容易,本地測試的時候,也覺得很簡單就過了,然后和對方聯調的時候,稀里嘩啦調了N久,

中間對方換了人接手,稀里嘩啦又調了N久,對方改代碼,稀里嘩啦又又調了N久,最后上線了,發現接口對不上,,,

經過:

問題最開始只是亂碼問題,無非就是UTF-8和GBK之間的轉換,我們這邊統一的UTF-8的編碼,對方是GBK。對面改為

了UTF-8,聯調以正確結束;然后對面換人改代碼,說要GBK的,我們發了UTF-8的,他們能解析,然后說頭部編碼格式

要改為GBK,好奇他們居然可以解析的情況下,應要求做出了一個挺low的決定,替換字符串,將UTF-8換為GBK。【其實

這的時候就有點歪了,以至於后面調的比較吃力,當時應該和對方反復確認一下的】。說是沒問題,那就上線了,,,,

然后13call,說亂碼又出現了,,,

前輩們得知有問題后,第一時間支援,開始分析,才發現,最開始的測試是錯的,我用eclipse啟動tomcat服務器,這時候用

的是eclipse的編碼模式,應該生成war包放在tomcat下啟動才能模擬真實的環境,然后我們在不修改環境的情況下各種嘗試

編碼轉換,然后對方說收到了不是亂碼的數據,天真的我以為就可以收尾了

對方馬上提出,收不到參數的那個字段,這里面用的HttpClient的post方法發送,如下↓

CloseableHttpClient client = HttpClients.createDefault();
HttpPost post = new HttpPost("URL");
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
formparams.add(參數);
UrlEncodedFormEntity uefEntity;
uefEntity = new UrlEncodedFormEntity(formparams, "GBK");
post.setEntity(uefEntity);
HttpResponse response2 = client.execute(post);

debug的時候post之前,參數都是有值的,一到post就為null了,濃濃的詭異感飄然而起,前輩當機立斷,換方法

我們換用了HttpURLConnection方法,如下↓

URL postUrl = new URL(URL);
HttpURLConnection connection = (HttpURLConnection) postUrl.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(true);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.connect();
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
String content = "參數=" + URLEncoder.encode(參數, "GBK");
out.writeBytes(content);

收尾了。。。。。

總結:

前輩說,HttpURLConnection是基本的方法,HttpClient是基於HttpURLConnection的封裝,基於“簡單的問題用

復雜的方法,復雜的的問題用簡單的方法”原理,我們回歸原始,,,,

為前輩的機智點贊,記住--生成war包放在tomcat下啟動來模擬真實的環境,好奇為什么定接口的時候不用json,以后

我商討的方案,力爭用json,后期好保養,


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM