模块 java.net.http

接口 HttpResponse.BodyHandler<T>

类型参数:
T - 响应主体类型
封闭接口:
HttpResponse<T>
函数接口:
这是一个功能接口,因此可以用作 lambda 表达式或方法引用的赋值目标。

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

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

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

以下示例使用 预定义的身体处理程序 之一,它始终以相同的方式处理响应主体(将响应主体流式传输到文件)。

 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
参见: