- 类型参数:
-
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);
- 自 JDK 版本:
- 11
- 参见:
-
Method Summary
Modifier and TypeMethodDescriptionapply(HttpResponse.ResponseInfo responseInfo) 返回一个考虑给定响应状态代码和标头的BodySubscriber。
-
Method Details
-
apply
返回一个考虑给定响应状态代码和标头的BodySubscriber。在实际读取响应体字节之前调用此方法,其实现必须返回一个BodySubscriber来消耗响应体字节。响应体可以使用
discarding或replacing之一来丢弃。- 参数:
-
responseInfo- 响应信息 - 返回:
- 一个响应体订阅者
-