Response
對象由同步performRequest
方法返回或做爲ResponseListener#onSuccess(Response)
中的參數接收,它包裝http
客戶端返回的響應對象並公開一些其餘信息。html
Response response = restClient.performRequest(new Request("GET", "/")); RequestLine requestLine = response.getRequestLine(); HttpHost host = response.getHost(); int statusCode = response.getStatusLine().getStatusCode(); Header[] headers = response.getHeaders(); String responseBody = EntityUtils.toString(response.getEntity());
response.getRequestLine()
— 有關執行的請求的信息。response.getHost()
— 返回響應的主機。response.getStatusLine()
— 響應狀態行,你能夠從中檢索狀態代碼。response.getHeaders()
— 響應頭,也能夠經過getHeader(String)
按名稱檢索。response.getEntity()
— 響應體包含在org.apache.http.HttpEntity對象中。執行請求時,會拋出異常(或在如下方案中做爲ResponseListener#onFailure(Exception)
中的參數接收:java
IOException
apache
SocketTimeoutException
)ResponseException
json
2xx
),ResponseException
源自有效的http
響應,所以它公開其相應的Response
對象,該對象提供對返回的響應的訪問。對於返回404
狀態碼的HEAD
請求,不會拋出ResponseException
,由於它是一個預期的HEAD
響應,僅表示找不到該資源。除非ignore
參數包含404
,不然全部其餘HTTP
方法(例如,GET
)都會爲404
響應拋出ResponseException
。ignore
是一個特殊的客戶端參數,不會發送到Elasticsearch幷包含逗號分隔的錯誤狀態代碼列表,它容許控制是否應將某些錯誤狀態碼視爲預期響應而不是異常。這對於例如get
api頗有用,由於它能夠在文檔丟失時返回404
,在這種狀況下,響應正文將不包含錯誤,而是一般的get
api響應,只是沒有找到未找到的文檔。
請注意,低級別客戶端不會公開任何json
編組和反編組的輔助程序,用戶能夠自由地使用他們喜歡的庫。segmentfault
底層的Apache Async Http Client附帶了不一樣的org.apache.http.HttpEntity實現,容許以不一樣的格式提供請求體(流、字節數組、字符串等),至於讀取響應體,HttpEntity#getContent
方法很方便,它返回從先前緩衝的響應體讀取的InputStream
,做爲替代方案,能夠提供自定義org.apache.http.nio.protocol.HttpAsyncResponseConsumer來控制字節的讀取和緩衝方式。api
Java REST客戶端使用Apache Async Http Client使用的相同日誌庫:Apache Commons Logging,它支持許多流行的日誌記錄實現,啓用日誌記錄的java包是客戶端自己的org.elasticsearch.client
和嗅探器的org.elasticsearch.client.sniffer
。數組
還能夠啓用請求跟蹤器日誌記錄,以便以curl
格式記錄每一個請求和相應的響應,這在調試時很方便,例如,若是須要手動執行請求以檢查它是否仍然產生與它相同的響應,爲tracer
包啓用跟蹤日誌記錄以打印出此類日誌行,請注意,此類日誌記錄開銷很大,不該在生產環境中始終啓用,而是僅在須要時暫時使用。curl