模块  java.net.http
软件包  java.net.http

Interface HttpRequest.BodyPublisher

  • All Superinterfaces:
    Flow.Publisher<ByteBuffer>
    Enclosing class:
    HttpRequest

    public static interface HttpRequest.BodyPublisher
    extends Flow.Publisher<ByteBuffer>
    BodyPublisher将高级Java对象转换为适合作为请求主体发送的字节缓冲区流。 BodyPublishers提供了许多常见发布者的实现。

    所述BodyPublisher接口延伸Flow.Publisher<ByteBuffer> ,这意味着一个BodyPublisher充当的发布者byte buffers

    当发送包含正文的请求时,HTTP客户端订阅请求的BodyPublisher ,以便接收传出请求正文数据流。 Flow.SubscriberFlow.Publisher的正常语义由HTTP客户端实现,并且预期来自BodyPublisher实现。 每个传出请求导致一个HTTP客户端Subscriber订阅BodyPublisher ,以便提供包含请求主体的字节缓冲区序列。 发布者发布的实例ByteBuffer必须由发布者分配,并且在发布到HTTP客户端后不得访问。 这些订阅在请求正文完全发送时正常完成,并且可以通过错误提前取消或终止。 如果由于任何原因需要重新发送请求,则会创建一个新订阅,该订阅预计会生成与以前相同的数据。

    一个BodyPublisher一个报告content length0可能不被HTTP客户端进行订阅,因为它没有有效的数据公布。

    从以下版本开始:
    11
    另请参见:
    HttpRequest.BodyPublishers
    • 方法详细信息

      • contentLength

        long contentLength()
        返回此请求正文的内容长度。 如果没有发送请求主体,则可以为零,对于固定长度内容大于零,对于未知内容长度小于零。

        可以在订阅发布者之前调用此方法。 HTTP客户端实现可以多次调用此方法,并且每次必须返回相同的常量值。

        结果
        此请求正文的内容长度(如果已知)