【问题标题】:How to know which type of HttpEntity returned如何知道返回了哪种类型的 HttpEntity
【发布时间】:2014-05-02 05:55:26
【问题描述】:

我正在使用 4.3.3 版的 Apache HttpClient API。 当我执行以下语句时,它返回 HttpResponse 实例。

HttpResonse response = httpClient.execute(httpRequest);

执行以下语句获取响应实体。

HttpEntity entity = response.getEntity();

这里我想知道返回的是哪种类型的实体对象。例如:StringEntity、FileEntity、InputStreamEntity、...

我尝试了以下方法,但它返回了 ResponseEntityWrapper

String className = entity.getClass().getName();

有没有办法知道响应实体的具体类型?

【问题讨论】:

  • 首先,让我们相信您确实需要知道响应实体对象的类型。
  • @SotiriosDelimanolis 我正在为 REST 调用执行编写一个低级层。如果返回的响应正文是 StringEntity,我打算返回 String。如果是 FileEntity,那么我想返回 Stream。如果我为所有情况返回 InputStream,那么调用者必须为每个用例的解析流编写代码。如果我从低层解析并返回特定的响应,它将减少高层的代码冗余。

标签: java apache http httpclient apache-httpclient-4.x


【解决方案1】:

你不会直接从实体获得 Java 对象,它的内容是由它的 mime 类型指定的,你可以使用entity.getContentType().getValue() 获得(只要指定了 content-type,否则你显然会得到一个NullPointerException)。

内容类型是字符串,如“text/plain”或“text/html”。例如,如果您获得“application/json”内容类型,则需要使用“反序列化器”(如 Gson 或 Jackson)和 entity.getInputStream() 作为该反序列化器的输入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 2012-10-27
    • 2011-07-17
    • 1970-01-01
    相关资源
    最近更新 更多