前言:工作中遇到兩個系統之間通信的問題,需求是這樣的:要求將信息上報給上級部門(這裏的上級部門是兩一個系統),這就是跨系統通信了
解決方案:使用httpclient實現網絡通信,傳遞數據。
關鍵問題:httpClient postMethod 傳遞參數 防止中文亂碼
一,所需jar包
maven引用如下:
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.3</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging-api</artifactId>
<version>1.1</version>
</dependency>
二,使用httpclient的postMethod方法發送請求:
//創建PostMethod的子類設置編碼格式
public static class UTF8PostMethod extends PostMethod{
public UTF8PostMethod(String url){
super(url);
}
@Override
public String getRequestCharSet() {
//return super.getRequestCharSet();
return "UTF-8";
}
}
JSONObject json = JSONObject.fromObject(event);//將java對象轉換爲json對象
String str = json.toString();//將json對象轉換爲字符串
String url = "http://172.20.57.87:8080/gyly_ec_new3/api/mobileservices/district";//接口url
HttpClient client = new HttpClient();//創建httpClient對象
PostMethod post = new UTF8PostMethod(url);//創建PostMethod的子類UTF8PostMethod來設置編碼
NameValuePair message = new NameValuePair("json", str);//post請求必須使用 NameValuePair 類傳遞參數
post.setRequestBody(new NameValuePair[]{message});
try {
int code=client.executeMethod(post);//發送數據
if (code==200) {
System.out.println("請求成功!");
}else {
System.out.println("請求失敗!");
}
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
post.releaseConnection();//關閉連接
}
上面的代碼都有備註。
主要說一下:
PostMethod post = new UTF8PostMethod(url);//創建PostMethod的子類UTF8PostMethod來設置編碼
這裏使用postMethod 對象,防止中文亂碼,必須創建其子類UTF8PostMethod
設置編碼,纔可以防止中文亂碼。
結語:在網上看了很多種httpclient的用法,自己在做的時候也遇到很多問題,現在問題解決了,寫博客的時候卻感覺沒什麼可寫的,關鍵是找到正確的方式。如上代碼中我已經實現,並且可以使用。
如果你恰好也有同樣的需求,在看了我的代碼後有不明白的地方,可以給我留言,或者加我的qq:416404891,我會盡力給你解答。
互相學習。。。。。。。。。。。。。。。。。。
晚安!