HttpClient 是Apache Jakarta Common 下的子項目,能夠用來提供高效的、最新的、功能豐富的支持 HTTP 協議的客戶端編程工具包,而且它支持 HTTP 協議最新的版本和建議。
HTTP 協議多是如今 Internet 上使用得最多、最重要的協議了,愈來愈多的 Java 應用程序須要直接經過 HTTP 協議來訪問網絡資源。雖然在 JDK 的 java net包中已經提供了訪問 HTTP 協議的基本功能,可是對於大部分應用程序來講,JDK 庫自己提供的功能還不夠豐富和靈活。HttpClient 是 Apache Jakarta Common 下的子項目,用來提供高效的、最新的、功能豐富的支持 HTTP 協議的客戶端編程工具包,而且它支持 HTTP 協議最新的版本和建議。HttpClient 已經應用在不少的項目中,好比 Apache Jakarta 上很著名的另外兩個開源項目 Cactus 和 HTMLUnit 都使用了 HttpClient。java
Fastjson 是一個 Java 庫,能夠將 Java 對象轉換爲 JSON 格式,固然它也能夠將 JSON 字符串轉換爲 Java 對象。git
Fastjson 能夠操做任何 Java 對象,即便是一些預先存在的沒有源碼的對象。github
Fastjson 源碼地址:https://github.com/alibaba/fastjsonapache
Fastjson 中文 Wiki:https://github.com/alibaba/fastjson/wiki/Quick-Start-CN編程
提供服務器端、安卓客戶端兩種解析工具,性能表現較好。json
提供了 toJSONString() 和 parseObject() 方法來將 Java 對象與 JSON 相互轉換。調用toJSONString方 法便可將對象轉換成 JSON 字符串,parseObject 方法則反過來將 JSON 字符串轉換成對象。服務器
容許轉換預先存在的沒法修改的對象(只有class、無源代碼)。網絡
Java泛型的普遍支持。app
容許對象的自定義表示、容許自定義序列化類。ide
支持任意複雜對象(具備深厚的繼承層次和普遍使用的泛型類型)。
一、GetData.java:使用httpclient接收數據、再用fastJson將json數據解析爲JavaBean。
package com.get_data.get; import java.io.IOException; import com.alibaba.fastjson.JSON; import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; public class GetData { public static void main(String[] args) { HttpClient client = new DefaultHttpClient(); //建立get請求實例 //HttpGet get = new HttpGet("http://www.baidu.com"); HttpGet get = new HttpGet("http://localhost:7333/a"); System.out.println("請求的uri爲:"+get.getURI()); try { // 客戶端執行get請求 返回響應實體 HttpResponse response = client.execute(get); //獲取請求狀態行 System.out.println("請求狀態行爲:"+response.getStatusLine()); //獲取全部的請求頭 Header[] headers=response.getAllHeaders(); for (Header header :headers){ //遍歷獲取全部請求頭的名稱和值 System.out.println(header.getName()+" :--: "+header.getValue()); } System.out.println("-----------------------------------------------"); //獲取響應的實體 HttpEntity entity =response.getEntity(); if (entity!=null){ String str=EntityUtils.toString(entity,"UTF-8"); System.out.println("entity:"+str); System.out.println("獲取到的json爲:"+str); User newUser = JSON.parseObject(str, User.class); System.out.println("User: "+newUser); System.out.println("newUser.getAddress(): "+newUser.getAddress()); //System.out.println(EntityUtils.toString(entity,"UTF-8")); System.out.println("================================="); System.out.println("內容長度爲:"+entity.getContentLength()); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ //釋放鏈接 client.getConnectionManager().shutdown(); } } }
二、http://localhost:7333/a返回的json數據
{ "name":"James", "age":18, "address":"chongqing" }
三、User.java實體類
public class User { private String name; private int age; private String sex; public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } private String address; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + ", address='" + address + '\'' + '}'; } }
四、
輸出結果:
請求的uri爲:http://localhost:7333/a 14:31:04.341 [main] DEBUG org.apache.http.impl.conn.BasicClientConnectionManager - Get connection for route {}->http://localhost:7333 14:31:04.387 [main] DEBUG org.apache.http.impl.conn.DefaultClientConnectionOperator - Connecting to localhost:7333 14:31:04.403 [main] DEBUG org.apache.http.client.protocol.RequestAddCookies - CookieSpec selected: default 14:31:04.403 [main] DEBUG org.apache.http.client.protocol.RequestAuthCache - Auth cache not set in the context 14:31:04.403 [main] DEBUG org.apache.http.client.protocol.RequestTargetAuthentication - Target auth state: UNCHALLENGED 14:31:04.403 [main] DEBUG org.apache.http.client.protocol.RequestProxyAuthentication - Proxy auth state: UNCHALLENGED 14:31:04.403 [main] DEBUG org.apache.http.impl.client.DefaultHttpClient - Attempt 1 to execute request 14:31:04.403 [main] DEBUG org.apache.http.impl.conn.DefaultClientConnection - Sending request: GET /a HTTP/1.1 14:31:04.403 [main] DEBUG org.apache.http.wire - >> "GET /a HTTP/1.1[\r][\n]" 14:31:04.403 [main] DEBUG org.apache.http.wire - >> "Host: localhost:7333[\r][\n]" 14:31:04.403 [main] DEBUG org.apache.http.wire - >> "Connection: Keep-Alive[\r][\n]" 14:31:04.403 [main] DEBUG org.apache.http.wire - >> "User-Agent: Apache-HttpClient/4.5.2 (Java/1.8.0_161)[\r][\n]" 14:31:04.403 [main] DEBUG org.apache.http.wire - >> "[\r][\n]" 14:31:04.403 [main] DEBUG org.apache.http.headers - >> GET /a HTTP/1.1 14:31:04.403 [main] DEBUG org.apache.http.headers - >> Host: localhost:7333 14:31:04.403 [main] DEBUG org.apache.http.headers - >> Connection: Keep-Alive 14:31:04.403 [main] DEBUG org.apache.http.headers - >> User-Agent: Apache-HttpClient/4.5.2 (Java/1.8.0_161) 14:31:04.419 [main] DEBUG org.apache.http.wire - << "HTTP/1.1 200 [\r][\n]" 14:31:04.434 [main] DEBUG org.apache.http.wire - << "Content-Type: application/json;charset=UTF-8[\r][\n]" 14:31:04.434 [main] DEBUG org.apache.http.wire - << "Transfer-Encoding: chunked[\r][\n]" 14:31:04.434 [main] DEBUG org.apache.http.wire - << "Date: Tue, 01 Jan 2019 06:31:04 GMT[\r][\n]" 14:31:04.434 [main] DEBUG org.apache.http.wire - << "[\r][\n]" 14:31:04.434 [main] DEBUG org.apache.http.impl.conn.DefaultClientConnection - Receiving response: HTTP/1.1 200 14:31:04.434 [main] DEBUG org.apache.http.headers - << HTTP/1.1 200 14:31:04.434 [main] DEBUG org.apache.http.headers - << Content-Type: application/json;charset=UTF-8 14:31:04.434 [main] DEBUG org.apache.http.headers - << Transfer-Encoding: chunked 14:31:04.434 [main] DEBUG org.apache.http.headers - << Date: Tue, 01 Jan 2019 06:31:04 GMT 14:31:04.434 [main] DEBUG org.apache.http.impl.client.DefaultHttpClient - Connection can be kept alive indefinitely 請求狀態行爲:HTTP/1.1 200 Content-Type :--: application/json;charset=UTF-8 Transfer-Encoding :--: chunked Date :--: Tue, 01 Jan 2019 06:31:04 GMT ----------------------------------------------- 14:31:04.450 [main] DEBUG org.apache.http.wire - << "2f[\r][\n]" 14:31:04.450 [main] DEBUG org.apache.http.wire - << "{"name":"James","age":18,"address":"chongqing"}" 14:31:04.450 [main] DEBUG org.apache.http.wire - << "[\r][\n]" 14:31:04.450 [main] DEBUG org.apache.http.wire - << "0[\r][\n]" 14:31:04.450 [main] DEBUG org.apache.http.wire - << "[\r][\n]" 14:31:04.450 [main] DEBUG org.apache.http.impl.conn.BasicClientConnectionManager - Releasing connection org.apache.http.impl.conn.ManagedClientConnectionImpl@4d3167f4 14:31:04.450 [main] DEBUG org.apache.http.impl.conn.BasicClientConnectionManager - Connection can be kept alive indefinitely entity:{"name":"James","age":18,"address":"chongqing"} 獲取到的json爲:{"name":"James","age":18,"address":"chongqing"} User: User{name='James', age=18, address='chongqing'} newUser.getAddress(): chongqing ================================= 內容長度爲:-1 14:31:04.590 [main] DEBUG org.apache.http.impl.conn.DefaultClientConnection - Connection 0.0.0.0:64518<->127.0.0.1:7333 closed Process finished with exit code 0