模块  java.net.http
软件包  java.net.http

Interface HttpResponse.BodyHandler<T>

  • 参数类型
    T - 响应正文类型
    Enclosing interface:
    HttpResponse < T >
    Functional Interface:
    这是一个功能接口,因此可以用作lambda表达式或方法引用的赋值目标。

    @FunctionalInterfacepublic static interface HttpResponse.BodyHandler<T>
    响应主体的处理程序。 BodyHandlers提供了许多常见的主体处理程序的实现。

    BodyHandler接口允许在收到实际响应主体之前检查响应代码和标头,并负责创建响应BodySubscriber BodySubscriber使用实际的响应主体字节,通常将它们转换为更高级别的Java类型。

    BodyHandler是一个获取ResponseInfo对象的函数; 并返回BodySubscriber 当响应状态代码和标头可用时,但在收到响应正文字节之前,将调用BodyHandler

    以下示例使用predefined body handlers中的一个始终以相同方式处理响应主体(将响应主体流式传输到文件)。

       HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("http://www.foo.com/")) .build(); client.sendAsync(request, BodyHandlers.ofFile(Paths.get("/tmp/f"))) .thenApply(HttpResponse::body) .thenAccept(System.out::println);  
    请注意,即使预定义的处理程序不检查响应代码,响应代码和标头也始终可以从HttpResponse检索到。

    在第二个示例中,该函数根据状态代码返回不同的订户。

       HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("http://www.foo.com/")) .build(); BodyHandler<Path> bodyHandler = (rspInfo) -> rspInfo.statusCode() == 200 ? BodySubscribers.ofFile(Paths.get("/tmp/f")) : BodySubscribers.replacing(Paths.get("/NULL")); client.sendAsync(request, bodyHandler) .thenApply(HttpResponse::body) .thenAccept(System.out::println);  
    从以下版本开始:
    11
    另请参见:
    HttpResponse.BodyHandlers