CodeGym /Curs Java /Modulul 3 /Adăugarea corpului la HttpRequest

Adăugarea corpului la HttpRequest

Modulul 3
Nivel , Lecţie
Disponibil

3.1 Body Publishers

Sper că nu ați uitat că, pe lângă cererile GET , există și cererile PUT și POST , când trebuie să adăugați și la cerere , adică corpul cererii.request body

HttpRequestClasa are o clasă interioară specială pentru aceasta BodyPublisher. Deși din punct de vedere tehnic este o interfață care are mai multe implementări, despre care vom discuta mai jos

Și vom începe cu cel mai simplu - absența unui organism de solicitare. Da, se întâmplă.


HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .POST(HttpRequest.BodyPublishers.noBody())
   .build();

Simplu și frumos.

3.2 ofString()

A doua cea mai comună opțiune este de a trece un șir ca corp de cerere. Acest lucru se face foarte simplu:


HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .headers("Content-Type", "text/plain;charset=UTF-8")
   .POST(HttpRequest.BodyPublishers.ofString("Hello"))
   .build();

Apropo, puteți seta codificarea șirului transmis. Poate fi foarte util dacă serverul http către care este trimisă cererea nu funcționează pe UTF8.


HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .POST(HttpRequest.BodyPublishers.ofString("Hello", Charset. US-ASCII)))
   .build();

3.3 din Fișier()

În cele din urmă, poate doriți să atașați un fișier la cererea POST . Acesta este modul în care avatarurile dvs. sunt de obicei încărcate pe server. Pentru a face acest lucru, trebuie să apelați metoda ofFile(), unde să transferați Pathfișierul local:


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 ofByteArray()

Un alt scenariu comun este trimiterea unui set de octeți către server. De exemplu, ați serializat un obiect ca un set de octeți, ați criptat ceva sau doriți doar să trimiteți un buffer de date. Acest lucru necesită o metodă .ofByteArray().

Această metodă ia ca parametru o matrice de octeți. Exemplu:


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 din InputStream()

În cele din urmă, ultimul, dar nu în ultimul rând, scenariu interesant este atașarea InputStreamunei cereri POST .

Există o funcție specială pentru aceasta ofInputStream(). Și ea este foarte inteligentă. Vă permite să organizați transferul de date din flux în flux, să atașați un flux de date la o solicitare POS care nu este încă deschisă.

Trebuie să transmiteți o funcție funcției ofInputStream(), care va returna un flux ca rezultat InputStream.

Exemplu:


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();

Nu m-am obosit să îngrădesc grădina aici, dar cred că înțelegeți principiul. De ce au făcut asta? Puteți utiliza aproape întotdeauna ofByteArray(). Dar dacă doriți să trimiteți date asincron sau trebuie să implementați un scenariu deosebit de complex, atunci puteți utiliza această metodă.

Comentarii
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION