我正在使用apache的HttpClient(通过Fluent API)。当我取回响应对象时,我首先执行以下操作:
response.returnResponse().getStatusLine().getStatusCode()
如果状态代码为 4xx 或 5xx,则引发异常,或者返回内容:
response.returnContent().asBytes();
此处response
是 Response
类型的对象。但是当我运行这个时,我得到:
java.lang.IllegalStateException: Response content has been already consumed.
我该如何解决这个问题?
Response#returnResponse()
和Response#returnContent()
都强制读取HttpResponse
InputStream
。由于您无法两次读取InputStream
,因此库已放置标志和检查以断言InputStream
尚未使用。
你无法绕过这个。您要做的是获取基础HttpResponse
对象,并以字节形式获取状态代码和正文。
HttpResponse httpResponse = response.returnResponse();
httpResponse.getStatusLine().getStatusCode();
byte[] bytes = EntityUtils.toByteArray(httpResponse.getEntity());