CodeGym/Java Course/Modulo 3/Aggiunta del corpo a HttpRequest

Aggiunta del corpo a HttpRequest

Disponibile

3.1 Corpo Editori

Spero che tu non abbia dimenticato che oltre alle richieste GET , ci sono anche richieste PUT e POST , quando devi anche aggiungere alla richiesta , cioè il corpo della richiesta.request body

HttpRequestLa classe ha una classe interna speciale per questo BodyPublisher. Sebbene sia tecnicamente un'interfaccia che ha più implementazioni, di cui parleremo di seguito

E inizieremo con il più semplice: l'assenza di un corpo di richiesta. Sì, succede.

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

Semplice e bello.

3.2 diString()

La seconda opzione più comune è passare una stringa come corpo della richiesta. Questo è fatto molto semplicemente:

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

A proposito, puoi impostare la codifica della stringa trasmessa. Può essere molto utile se il server http a cui viene inviata la richiesta non funziona su UTF8.

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

3.3 diFile()

Infine, potresti voler allegare un file alla richiesta POST . Questo è il modo in cui i tuoi avatar vengono solitamente caricati sul server. Per fare ciò, devi chiamare il metodo ofFile(), dove trasferire Pathil file locale:

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

Un altro scenario comune consiste nell'inviare un set di byte al server. Ad esempio, hai serializzato un oggetto come un insieme di byte, crittografato qualcosa o vuoi semplicemente inviare un buffer di dati. Ciò richiede un metodo .ofByteArray().

Questo metodo accetta un array di byte come parametro. Esempio:

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

Infine, l'ultimo ma non meno interessante scenario è l'allegato InputStreama una richiesta POST .

C'è una funzione speciale per questo ofInputStream(). Ed è molto intelligente. Ti permette di organizzare il trasferimento dei dati da flusso a flusso, allegare un flusso di dati a una richiesta POS che non è ancora aperta.

Devi passare una funzione alla funzione ofInputStream(), che come risultato restituirà uno stream InputStream.

Esempio:

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

Non mi sono preso la briga di recintare il giardino qui, ma penso che tu capisca il principio. Perché l'hanno fatto? Puoi quasi sempre usare il file ofByteArray(). Ma se vuoi inviare dati in modo asincrono o devi implementare uno scenario particolarmente complesso, puoi utilizzare questo metodo.

Commenti
  • Popolari
  • Nuovi
  • Vecchi
Devi avere effettuato l'accesso per lasciare un commento
Questa pagina non ha ancora commenti