3.1 Body-uitgevers
Ik hoop dat je niet bent vergeten dat er naast GET-verzoeken ook PUT- en POST-verzoeken zijn , wanneer je ook iets aan het verzoek moet toevoegen request body
, dat wil zeggen de hoofdtekst van het verzoek.
De klas heeft hiervoor HttpRequest
een speciale binnenklas BodyPublisher
. Hoewel het technisch gezien een interface is met meerdere implementaties, die we hieronder zullen bespreken
En we beginnen met de eenvoudigste: de afwezigheid van een verzoekinstantie. Ja, het gebeurt.
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.POST(HttpRequest.BodyPublishers.noBody())
.build();
Eenvoudig en mooi.
3.2 vanString()
De tweede meest gebruikelijke optie is om een tekenreeks door te geven als de aanvraagtekst. Dit gaat heel eenvoudig:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.headers("Content-Type", "text/plain;charset=UTF-8")
.POST(HttpRequest.BodyPublishers.ofString("Hello"))
.build();
Overigens kunt u de codering van de verzonden string instellen. Het kan erg handig zijn als de http-server waarnaar het verzoek wordt verzonden niet werkt op UTF8.
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.POST(HttpRequest.BodyPublishers.ofString("Hello", Charset. US-ASCII)))
.build();
3.3 vanBestand()
Ten slotte wilt u misschien een bestand aan het POST-verzoek toevoegen . Dit is hoe uw avatars meestal naar de server worden geüpload. Om dit te doen, moet u de methode aanroepen , waar u het lokale bestand ofFile()
wilt overbrengen :Path
Path avatar = Path.of("c://avatar.jpeg");
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.headers("Content-Type", "image/jpeg")
.POST(HttpRequest.BodyPublishers.ofFile(avatar))
.build();
3.4 vanByteArray()
Een ander veelvoorkomend scenario is het verzenden van een set bytes naar de server. U hebt bijvoorbeeld een object geserialiseerd als een set bytes, iets gecodeerd of u wilt gewoon een gegevensbuffer verzenden. Dit vereist een methode .ofByteArray()
.
Deze methode neemt een reeks bytes als parameter. Voorbeeld:
byte[] data = "My Secret Message".getBytes();
byte[] dataEncripted = SuperEncriptor.encript(data);
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.headers("Content-Type", "application/octet-stream")
.POST(HttpRequest.BodyPublishers.ofByteArray(dataEncripted))
.build();
3.5 van InputStream()
Ten slotte is het laatste maar daarom niet minst interessante scenario het koppelen InputStream
aan een POST-verzoek .
Hier is een speciale functie voor ofInputStream()
. En ze is erg slim. Hiermee kunt u de overdracht van gegevens van stream naar stream organiseren, een datastream koppelen aan een POS-verzoek dat nog niet eens open is.
U moet een functie doorgeven aan de functie ofInputStream()
, die als resultaat een stream zal retourneren InputStream
.
Voorbeeld:
byte[] data = "My Secret Message".getBytes();
//wrapping an array of bytes into a stream.
InputStream is = new ByteArrayInputStream(data);
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.headers("Content-Type", "application/octet-stream")
.POST(HttpRequest.BodyPublishers.ofInputStream (() -> is;))
.build();
Ik heb niet de moeite genomen om de tuin hier af te schermen, maar ik denk dat je het principe begrijpt. Waarom deden ze dat? Je kunt bijna altijd de ofByteArray()
. Maar als u gegevens asynchroon wilt verzenden of als u een bijzonder complex scenario moet implementeren, kunt u deze methode gebruiken.
GO TO FULL VERSION