java.lang.Object
java.net.http.HttpRequest.BodyPublishers
- Enclosing class:
- HttpRequest
public static class HttpRequest.BodyPublishers extends Object
Implementations of
BodyPublisher
that implement
various useful publishers, such as publishing the request body from a
String, or from a file.
The following are examples of using the predefined body publishers to convert common high-level Java objects into a flow of data suitable for sending as a request body:
// Request body from a String
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://foo.com/"))
.header("Content-Type", "text/plain; charset=UTF-8")
.POST(BodyPublishers.ofString("some body text"))
.build();
// Request body from a File
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://foo.com/"))
.header("Content-Type", "application/json")
.POST(BodyPublishers.ofFile(Paths.get("file.json")))
.build();
// Request body from a byte array
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://foo.com/"))
.POST(BodyPublishers.ofByteArray(new byte[] { ... }))
.build();
- Since:
- 11
-
Method Summary
Modifier and Type Method Description static HttpRequest.BodyPublisher
fromPublisher(Flow.Publisher<? extends ByteBuffer> publisher)
Returns a request body publisher whose body is retrieved from the givenFlow.Publisher
.static HttpRequest.BodyPublisher
fromPublisher(Flow.Publisher<? extends ByteBuffer> publisher, long contentLength)
Returns a request body publisher whose body is retrieved from the givenFlow.Publisher
.static HttpRequest.BodyPublisher
noBody()
A request body publisher which sends no request body.static HttpRequest.BodyPublisher
ofByteArray(byte[] buf)
Returns a request body publisher whose body is the given byte array.static HttpRequest.BodyPublisher
ofByteArray(byte[] buf, int offset, int length)
Returns a request body publisher whose body is the content of the given byte array oflength
bytes starting from the specifiedoffset
.static HttpRequest.BodyPublisher
ofByteArrays(Iterable<byte[]> iter)
A request body publisher that takes data from anIterable
of byte arrays.static HttpRequest.BodyPublisher
ofFile(Path path)
A request body publisher that takes data from the contents of a File.static HttpRequest.BodyPublisher
ofInputStream(Supplier<? extends InputStream> streamSupplier)
A request body publisher that reads its data from anInputStream
.static HttpRequest.BodyPublisher
ofString(String body)
Returns a request body publisher whose body is the givenString
, converted using theUTF_8
character set.static HttpRequest.BodyPublisher
ofString(String s, Charset charset)
Returns a request body publisher whose body is the givenString
, converted using the given character set.
-
Method Details
-
fromPublisher
public static HttpRequest.BodyPublisher fromPublisher(Flow.Publisher<? extends ByteBuffer> publisher)Returns a request body publisher whose body is retrieved from the givenFlow.Publisher
. The returned request body publisher has an unknown content length.- API Note:
- This method can be used as an adapter between
BodyPublisher
andFlow.Publisher
, where the amount of request body that the publisher will publish is unknown. - Parameters:
publisher
- the publisher responsible for publishing the body- Returns:
- a BodyPublisher
-
fromPublisher
public static HttpRequest.BodyPublisher fromPublisher(Flow.Publisher<? extends ByteBuffer> publisher, long contentLength)Returns a request body publisher whose body is retrieved from the givenFlow.Publisher
. The returned request body publisher has the given content length.The given
contentLength
is a positive number, that represents the exact amount of bytes thepublisher
must publish.- API Note:
- This method can be used as an adapter between
BodyPublisher
andFlow.Publisher
, where the amount of request body that the publisher will publish is known. - Parameters:
publisher
- the publisher responsible for publishing the bodycontentLength
- a positive number representing the exact amount of bytes the publisher will publish- Returns:
- a BodyPublisher
- Throws:
IllegalArgumentException
- if the content length is non-positive
-
ofString
Returns a request body publisher whose body is the givenString
, converted using theUTF_8
character set.- Parameters:
body
- the String containing the body- Returns:
- a BodyPublisher
-
ofString
Returns a request body publisher whose body is the givenString
, converted using the given character set.- Parameters:
s
- the String containing the bodycharset
- the character set to convert the string to bytes- Returns:
- a BodyPublisher
-
ofInputStream
public static HttpRequest.BodyPublisher ofInputStream(Supplier<? extends InputStream> streamSupplier)A request body publisher that reads its data from anInputStream
. ASupplier
ofInputStream
is used in case the request needs to be repeated, as the content is not buffered. TheSupplier
may returnnull
on subsequent attempts, in which case the request fails.- Parameters:
streamSupplier
- a Supplier of open InputStreams- Returns:
- a BodyPublisher
-
ofByteArray
Returns a request body publisher whose body is the given byte array.- Parameters:
buf
- the byte array containing the body- Returns:
- a BodyPublisher
-
ofByteArray
Returns a request body publisher whose body is the content of the given byte array oflength
bytes starting from the specifiedoffset
.- Parameters:
buf
- the byte array containing the bodyoffset
- the offset of the first bytelength
- the number of bytes to use- Returns:
- a BodyPublisher
- Throws:
IndexOutOfBoundsException
- if the sub-range is defined to be out of bounds
-
ofFile
A request body publisher that takes data from the contents of a File.Security manager permission checks are performed in this factory method, when the
BodyPublisher
is created. Care must be taken that theBodyPublisher
is not shared with untrusted code.- Parameters:
path
- the path to the file containing the body- Returns:
- a BodyPublisher
- Throws:
FileNotFoundException
- if the path is not foundSecurityException
- if a security manager has been installed and it deniesread access
to the given file
-
ofByteArrays
A request body publisher that takes data from anIterable
of byte arrays. AnIterable
is provided which suppliesIterator
instances. Each attempt to send the request results in one invocation of theIterable
.- Parameters:
iter
- an Iterable of byte arrays- Returns:
- a BodyPublisher
-
noBody
A request body publisher which sends no request body.- Returns:
- a BodyPublisher which completes immediately and sends no request body.
-