读取响应
编辑读取响应编辑
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());
有关已执行请求的信息 |
|
返回响应的主机 |
|
响应状态行,例如,您可以从中检索状态代码 |
|
响应标头,也可以通过名称通过 |
|
包含在 |
执行请求时,会在以下情况下抛出异常(或在 ResponseListener#onFailure(Exception)
中作为参数接收)
-
IOException
- 通信问题(例如 SocketTimeoutException)
-
ResponseException
- 返回了响应,但其状态代码指示错误(不是
2xx
)。ResponseException
源自有效的 http 响应,因此它公开了其对应的Response
对象,该对象允许访问返回的响应。
对于返回 404
状态代码的 HEAD
请求,不会 抛出 ResponseException
,因为这是一个预期的 HEAD
响应,它只是表示未找到资源。所有其他 HTTP 方法(例如,GET
)都会为 404
响应抛出 ResponseException
,除非 ignore
参数包含 404
。ignore
是一个特殊的客户端参数,不会发送到 Elasticsearch,它包含一个以逗号分隔的错误状态代码列表。它允许控制是否应将某些错误状态代码视为预期响应,而不是异常。例如,这对于 get api 很有用,因为它在文档丢失时可以返回 404
,在这种情况下,响应正文将不包含错误,而是包含通常的 get api 响应,只是没有文档,因为它未找到。
请注意,低级客户端没有公开任何用于 json 编组和反编组的助手。用户可以自由使用他们喜欢的库来实现此目的。
底层的 Apache Async Http Client 附带了不同的 org.apache.http.HttpEntity
实现,允许以不同的格式(流、字节数组、字符串等)提供请求正文。至于读取响应正文,HttpEntity#getContent
方法很方便,它返回一个从先前缓冲的响应正文读取的 InputStream
。或者,可以提供一个自定义的 org.apache.http.nio.protocol.HttpAsyncResponseConsumer
来控制如何读取和缓冲字节。