概述:在學習微信接口的過程當中用到了請求web接口資源的操做web
Jersey 客戶端API基礎 api
首先須要建立一個com.sun.jersey .api.client.Client 類的實例。微信
import com.sun.jersey .api.client.Client;app
Client client = Client.create();ide
或者 ClientConfig clientConfig = ClienConfig.DefaultClientConfig();post
Client client = Client.create(clientConfig); Client 類是建立一個 RESTful Web Service 客戶端的主要配置點。你可使用它來配置不一樣的客戶端屬性和功能,而且指出使用哪一個資源提供者。建立一個 Client 類的實例是一個比較昂貴的操做,因此儘可能避免建立一些不須要的客戶端實例。比較好的方式是儘量地複用已經存在的實例。學習
當你建立完一個 Client 類的實例後,你能夠開始使用它。不管如何,在發出請求前,你須要建立一個 Web Resource 對象來封裝客戶端所須要的 Web 資源。ui
Web 資源建立了一個 WebResponse 對象:編碼
import com.sun.jersey .api.client.WebResource;url
WebResource webResource = c.resource("https://api.weixin.qq.com/cgi-bin/message/custom/send");
經過使用 WebResource 對象來建立要發送到 Web 資源的請求,以及處理從 Web 資源返回的響應。例如,你可使用 WebResource 對象來發送 HTTP GET、PUT、POST 以及 DELETE 請求。
2.1 get 請求:使用 WebResource 類的 get() 方法來提交一個 HTTP GET請求到 Web 資源:
String s = webResource.get(String.class);
這表示若是 WebResource 對象的 URL 是https://api.weixin.qq.com/cgi-bin/message/custom/send,那麼一個 HTTP GET 請求將會發送到地址爲https://api.weixin.qq.com/cgi-bin/message/custom/send的資源。
String s = webResource.get(String.class);
你還能夠指定 get() 請求時的查詢參數。例如,下面的代碼在 get() 請求中指定了兩個查詢參數:
有兩種方式,其實也算同樣的吧:
第一種:
MultivaluedMap queryParams = new MultivaluedMapImpl();
queryParams.add("param1", val1);
queryParams.add("param2", val2);
String s = webResouce.queryParams(queryParams).get(String.class);
第二種:
webResource.queryParam("param1",val1).queryParam("param2",val2).get(String.class);
你還能夠指定響應所能接受的 MIME 類型。例如,下面的代碼指定了響應的 MIME 類型只能爲文本:
String s = webResource.accept("text/plain").get(String.class);
2.2 ClientResponse
你還能夠獲取對應請求的 HTTP 狀態碼,例以下面這個例子展現獲取一個請求所返回的文本實體與狀態碼:
ClientResponse response = webResource.accept("text/plain").get(ClientResponse.class);
int status = response.getStatus();
String textEntity = response.getEntity(String.class);
ClientResponse 對象表明了一個客戶端收到的 HTTP 響應。
2.3 put請求 :不想寫
2.4 post請求 :一個 POST 請求至關於一個 GET 請求和一個 PUT 請求的綜合,也就意味着,你可使用 POST 請求來發送一個實體到指定的 Web 資源而且接收另外一個實體。使用 WebResource 類的 post() 方法來發送一個 HTTP POST 請求到指定的 Web 資源。下面的例子展現了發送一個帶有查詢參數以及進行了 URL 編碼的表單數據的 POST 請求:
例子1.
MultivaluedMap formData = new MultivaluedMapImpl();
formData.add("name1", "val1");
formData.add("name2", "val2");
ClientResponse response = webResource.type("application/x-www-form-urlencoded").post(ClientResponse.class, formData);
2.5 delete 請求:使用 Web Resource 類的 delete() 方法來發送 HTTP DELETE 請求到指定的 Web 資源。例如,下面的例子展現刪除一個 URI 爲 https://api.weixin.qq.com/cgi-bin/message/custom/send 資源:
ClientResponse response = webResource.path("user/123")
.delete(ClientResponse.class);
注意:WebResource.path() 方法能夠在全部 HTTP 請求中使用,它可讓你給要請求的 Web 資源指定一個額外的路徑。另外一個 WebResouce 類的方法 header() 能夠給你的請求添加 HTTP 頭部信息。若是表單提交的話,須要new Form來做爲參數提交。
代碼例子 微信發送消息
/**
* 往指定用戶發送信息
* @param message
* @param toUser
* @return
*/
public WechatMessageResult send(String message, String toUser) {
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource webResource = client.resource("https://api.weixin.qq.com/cgi-bin/message/custom/send");
ClientResponse clientResponse = webResource
.queryParam("access_token", getAccessToken().getToken())
.post(ClientResponse.class, new Gson().toJson(new MassageBuilder("text").toUser(toUser).textContent(message).bulid()));
if (clientResponse.getStatus() != 200) {
throw new IllegalStateException("status error:" + clientResponse.getStatus());
} else {
return new Gson().fromJson(clientResponse.getEntity(String.class), WechatMessageResult.class);
}
}