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