Elasticsearch Java Low Level REST Client(讀取響應)

讀取響應

Response對象由同步performRequest方法返回或作爲ResponseListener#onSuccess(Response)中的參數接收,它包裝http客戶端返回的響應對象並公開一些其他信息。

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)中的參數接收:

IOException

  • 通信問題(例如SocketTimeoutException

ResponseException

  • 返回了一個響應,但其狀態代碼表示錯誤(不是2xx),ResponseException源自有效的http響應,因此它公開其相應的Response對象,該對象提供對返回的響應的訪問。
對於返回404狀態碼的HEAD請求,不會拋出ResponseException,因爲它是一個預期的HEAD響應,僅表示找不到該資源。除非ignore參數包含404,否則所有其他HTTP方法(例如,GET)都會爲404響應拋出ResponseExceptionignore是一個特殊的客戶端參數,不會發送到Elasticsearch幷包含逗號分隔的錯誤狀態代碼列表,它允許控制是否應將某些錯誤狀態碼視爲預期響應而不是異常。這對於例如getapi很有用,因爲它可以在文檔丟失時返回404,在這種情況下,響應正文將不包含錯誤,而是通常的getapi響應,只是沒有找到未找到的文檔。

請注意,低級別客戶端不會公開任何json編組和反編組的輔助程序,用戶可以自由地使用他們喜歡的庫。

底層的Apache Async Http Client附帶了不同的org.apache.http.HttpEntity實現,允許以不同的格式提供請求體(流、字節數組、字符串等),至於讀取響應體,HttpEntity#getContent方法很方便,它返回從先前緩衝的響應體讀取的InputStream,作爲替代方案,可以提供自定義org.apache.http.nio.protocol.HttpAsyncResponseConsumer來控制字節的讀取和緩衝方式。

日誌記錄

Java REST客戶端使用Apache Async Http Client使用的相同日誌庫:Apache Commons Logging,它支持許多流行的日誌記錄實現,啓用日誌記錄的java包是客戶端本身的org.elasticsearch.client和嗅探器的org.elasticsearch.client.sniffer

還可以啓用請求跟蹤器日誌記錄,以便以curl格式記錄每個請求和相應的響應,這在調試時很方便,例如,如果需要手動執行請求以檢查它是否仍然產生與它相同的響應,爲tracer包啓用跟蹤日誌記錄以打印出此類日誌行,請注意,此類日誌記錄開銷很大,不應在生產環境中始終啓用,而是僅在需要時暫時使用。


上一篇:執行請求

下一篇:嗅探器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章