CodeGym/Java Course/Module 3/Hoofdtekst toevoegen aan HttpRequest

Hoofdtekst toevoegen aan HttpRequest

Beschikbaar

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 HttpRequesteen 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 InputStreamaan 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.

Opmerkingen
  • Populair
  • Nieuw
  • Oud
Je moet ingelogd zijn om opmerkingen te kunnen maken
Deze pagina heeft nog geen opmerkingen