- 类型参数:
-
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
- 响应信息 - 返回:
- 一个响应体订阅者
-