- 类型参数:
T- 响应主体类型
- 封闭接口:
HttpResponse<T>
- 函数接口:
- 这是一个功能接口,因此可以用作 lambda 表达式或方法引用的赋值目标。
响应主体的处理程序。
BodyHandlers 类提供了许多常见主体处理程序的实现。
BodyHandler 接口允许在收到实际响应主体之前检查响应代码和标头,并负责创建响应 BodySubscriber 。 BodySubscriber 消耗实际的响应主体字节,并且通常将它们转换为更高级别的 Java 类型。
BodyHandler 是一个接受 ResponseInfo 对象的函数;并返回一个 BodySubscriber 。 BodyHandler 在响应状态代码和标头可用时调用,但在接收到响应正文字节之前。
以下示例使用 预定义的身体处理程序 之一,它始终以相同的方式处理响应主体(将响应主体流式传输到文件)。
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
- 参见:
-
方法总结
-
方法详情
-
apply
考虑到给定的响应状态代码和标头,返回一个BodySubscriber。在读取实际响应主体字节之前调用此方法,并且其实现必须返回BodySubscriber以使用响应主体字节。可以使用
discarding或replacing之一丢弃响应主体。- 参数:
responseInfo- 响应信息- 返回:
- 身体订阅者
-