-
- 参数类型
-
T
- 响应体类型。
- Enclosing class:
- HttpResponse < T >
- Functional Interface:
- 这是一个功能界面,因此可以用作lambda表达式或方法引用的赋值对象。
@FunctionalInterface public static interface HttpResponse.BodyHandler<T>
响应机构的处理程序。
Incubating Feature.将在以后的版本中删除。这是一个函数,它需要两个参数:响应状态代码和响应头,并返回一个
HttpResponse.BodyProcessor
。 该函数始终在响应体被读取之前调用。 它的实现可能会检查状态代码或标题,并且必须决定是接受响应体还是丢弃它,如果接受它,那么该如何处理它。定义了一些未使用状态代码或头部(意味着身体始终被接受)的预定义实现:
-
asByteArray()
-
asByteArrayConsumer(Consumer)
-
asFileDownload(Path,OpenOption...)
-
discard(Object)
-
asString(Charset)
这些实现返回等效的
HttpResponse.BodyProcessor
。 或者,处理程序可用于检查状态代码或标题,并根据需要返回不同的主体处理器。处理程序使用示例
第一个例子使用一个预定义的处理程序函数,忽略响应头和状态,并且始终以相同的方式处理响应体。
HttpResponse<Path> resp = HttpRequest .create(URI.create("http://www.foo.com")) .GET() .response(BodyHandler.asFile(Paths.get("/tmp/f")));
HttpResponse
当返回时,这些信息仍然可以从HttpResponse
访问。在第二个例子中,该函数根据状态代码返回不同的处理器。
HttpResponse<Path> resp1 = HttpRequest .create(URI.create("http://www.foo.com")) .GET() .response( (status, headers) -> status == 200 ? BodyProcessor.asFile(Paths.get("/tmp/f")) : BodyProcessor.discard(Paths.get("/NULL")));
-
-
方法摘要
-
-
-
方法详细信息
-
apply
HttpResponse.BodyProcessor<T> apply(int statusCode, HttpHeaders responseHeaders)
考虑到给定的响应状态代码和标题,返回一个BodyProcessor
。 阅读正文之前该方法总是叫其实现都可以决定,以保持身体和存储在某个地方,否则丢弃它,通过返回BodyProcessor
从返回discard()
。- 参数
-
statusCode
- 收到的HTTP状态码 -
responseHeaders
- 收到的响应头 - 结果
- 一个响应体处理程序
-
discard
static <U> HttpResponse.BodyHandler<U> discard(U value)
返回响应体处理程序,该处理程序丢弃响应正文并使用给定值作为替代。- 参数类型
-
U
- 响应体类型 - 参数
-
value
- U值作为身体返回 - 结果
- 一个响应体处理程序
-
asString
static HttpResponse.BodyHandler<String> asString(Charset charset)
返回BodyHandler<String>
返回一个BodyProcessor
<String>
从获得BodyProcessor.asString(Charset)
。 如果提供了一个字符集,则使用它进行解码。 如果字符集为null
则处理器尝试从Content-encoding
头中确定字符集。 如果不支持该字符集,则使用UTF_8
。- 参数
-
charset
- 将身体解释为字符集的名称。 如果是null
然后从Content-encoding头确定字符集 - 结果
- 一个响应体处理程序
-
asFile
static HttpResponse.BodyHandler<Path> asFile(Path file)
返回BodyHandler<Path>
返回一个BodyProcessor
<Path>
从获得BodyProcessor.asFile(Path)
。当返回
HttpResponse
对象时,身体已经完全写入文件,而HttpResponse.body()
返回了对其Path
的引用。- 参数
-
file
- 存储身体的文件 - 结果
- 一个响应体处理程序
-
asFileDownload
static HttpResponse.BodyHandler<Path> asFileDownload(Path directory, OpenOption... openOptions)
返回一个BodyHandler<Path>
,返回一个指定了下载目录的BodyProcessor
<Path
>,但文件名是从Content-Disposition
响应头获取的。Content-Disposition
标头必须指定附件类型,并且还必须包含filename参数。 如果文件名指定多个路径组件,则仅使用最终组件作为文件名(具有给定的目录名称)。 当返回HttpResponse
对象时,身体已经完全写入文件,并且HttpResponse.body()
返回一个Path
对象的文件。 返回的Path
是提供的目录名称和服务器提供的文件名的组合。 如果目标目录不存在或不能写入,则响应将失败,并显示IOException
。- 参数
-
directory
- 存储文件的目录 -
openOptions
- 打开选项 - 结果
- 一个响应体处理程序
-
asFile
static HttpResponse.BodyHandler<Path> asFile(Path file, OpenOption... openOptions)
返回BodyHandler<Path>
返回一个BodyProcessor
<Path>
从获得BodyProcessor.asFile(Path,OpenOption...)
。当返回
HttpResponse
对象时,正文已被完全写入该文件,而HttpResponse.body()
返回对其Path
的引用。- 参数
-
file
- 存储身体的文件名 -
openOptions
- 打开/创建文件时使用的任何选项 - 结果
- 一个响应体处理程序
-
asByteArrayConsumer
static HttpResponse.BodyHandler<Void> asByteArrayConsumer(Consumer<Optional<byte[]>> consumer)
返回一个BodyHandler<Void>
,返回一个从<Void>
获得的BodyProcessor
<Void> 。当返回
HttpResponse
对象时,身体已被完全写入消费者。- 参数
-
consumer
- 消费者接受响应机构 - 结果
- 一个响应体处理程序
-
asByteArray
static HttpResponse.BodyHandler<byte[]> asByteArray()
返回一个BodyHandler<byte[]>
,返回一个从BodyProcessor.asByteArray()
获得的BodyProcessor
<byte[]
>。当返回
HttpResponse
对象时,主体已被完全写入字节数组。- 结果
- 一个响应体处理程序
-
asString
static HttpResponse.BodyHandler<String> asString()
返回BodyHandler<String>
返回一个BodyProcessor
<String>
从获得BodyProcessor.asString(Charset)
。 使用Content-encoding
响应标头中指定的字符集对身体进行解码。 如果没有这样的标题,或者不支持字符集,则使用UTF_8
。当返回
HttpResponse
对象时,身体已被完全写入字符串。- 结果
- 一个响应体处理程序
-
-