软件包  jdk.incubator.http

Interface HttpResponse.BodyHandler<T>

  • 参数类型
    T - 响应体类型。
    Enclosing class:
    HttpResponse < T >
    Functional Interface:
    这是一个功能界面,因此可以用作lambda表达式或方法引用的赋值对象。


    @FunctionalInterface
    public static interface HttpResponse.BodyHandler<T>
    响应机构的处理程序。
    Incubating Feature.将在以后的版本中删除。

    这是一个函数,它需要两个参数:响应状态代码和响应头,并返回一个HttpResponse.BodyProcessor 该函数始终在响应体被读取之前调用。 它的实现可能会检查状态代码或标题,并且必须决定是接受响应体还是丢弃它,如果接受它,那么该如何处理它。

    定义了一些未使用状态代码或头部(意味着身体始终被接受)的预定义实现:

    这些实现返回等效的HttpResponse.BodyProcessor 或者,处理程序可用于检查状态代码或标题,并根据需要返回不同的主体处理器。

    处理程序使用示例

    第一个例子使用一个预定义的处理程序函数,忽略响应头和状态,并且始终以相同的方式处理响应体。

       HttpResponse<Path> resp = HttpRequest .create(URI.create("http://www.foo.com")) .GET() .response(BodyHandler.asFile(Paths.get("/tmp/f")));  
    请注意,尽管这些预定义的处理程序忽略了状态代码和标题, HttpResponse当返回时,这些信息仍然可以从HttpResponse访问。

    在第二个例子中,该函数根据状态代码返回不同的处理器。

       HttpResponse<Path> resp1 = HttpRequest .create(URI.create("http://www.foo.com")) .GET() .response( (status, headers) -> status == 200 ? BodyProcessor.asFile(Paths.get("/tmp/f")) : BodyProcessor.discard(Paths.get("/NULL")));  
    • 方法详细信息

      • apply

        HttpResponse.BodyProcessor<T> apply​(int statusCode,
                                            HttpHeaders responseHeaders)
        考虑到给定的响应状态代码和标题,返回一个BodyProcessor 阅读正文之前该方法总是叫其实现都可以决定,以保持身体和存储在某个地方,否则丢弃它,通过返回BodyProcessor从返回discard()
        参数
        statusCode - 收到的HTTP状态码
        responseHeaders - 收到的响应头
        结果
        一个响应体处理程序
      • discard

        static <U> HttpResponse.BodyHandler<U> discard​(U value)
        返回响应体处理程序,该处理程序丢弃响应正文并使用给定值作为替代。
        参数类型
        U - 响应体类型
        参数
        value - U值作为身体返回
        结果
        一个响应体处理程序
      • asString

        static HttpResponse.BodyHandler<String> asString​(Charset charset)
        返回BodyHandler<String>返回一个BodyProcessor <String>从获得BodyProcessor.asString(Charset) 如果提供了一个字符集,则使用它进行解码。 如果字符集为null则处理器尝试从Content-encoding头中确定字符集。 如果不支持该字符集,则使用UTF_8
        参数
        charset - 将身体解释为字符集的名称。 如果是null然后从Content-encoding头确定字符集
        结果
        一个响应体处理程序
      • asFileDownload

        static HttpResponse.BodyHandler<Path> asFileDownload​(Path directory,
                                                             OpenOption... openOptions)
        返回一个BodyHandler<Path> ,返回一个指定了下载目录的BodyProcessor < Path >,但文件名是从Content-Disposition响应头获取的。 Content-Disposition标头必须指定附件类型,并且还必须包含filename参数。 如果文件名指定多个路径组件,则仅使用最终组件作为文件名(具有给定的目录名称)。 当返回HttpResponse对象时,身体已经完全写入文件,并且HttpResponse.body()返回一个Path对象的文件。 返回的Path是提供的目录名称和服务器提供的文件名的组合。 如果目标目录不存在或不能写入,则响应将失败,并显示IOException
        参数
        directory - 存储文件的目录
        openOptions - 打开选项
        结果
        一个响应体处理程序
      • asByteArrayConsumer

        static HttpResponse.BodyHandler<Void> asByteArrayConsumer​(Consumer<Optional<byte[]>> consumer)
        返回一个BodyHandler<Void> ,返回一个 <Void>获得的BodyProcessor <Void>

        当返回HttpResponse对象时,身体已被完全写入消费者。

        参数
        consumer - 消费者接受响应机构
        结果
        一个响应体处理程序
      • asString

        static HttpResponse.BodyHandler<String> asString​()
        返回BodyHandler<String>返回一个BodyProcessor <String>从获得BodyProcessor.asString(Charset) 使用Content-encoding响应标头中指定的字符集对身体进行解码。 如果没有这样的标题,或者不支持字符集,则使用UTF_8

        当返回HttpResponse对象时,身体已被完全写入字符串。

        结果
        一个响应体处理程序