CodeGym/Java tanfolyam//Törzs hozzáadása a HttpRequesthez

Törzs hozzáadása a HttpRequesthez

Szint, Lecke
Elérhető

3.1 Body Publishers

Remélem nem felejtetted el, hogy a GET kéréseken kívül vannak PUT és POST kérések is , amikor is hozzá kell adni a kérést request body, vagyis a kérés törzsét.

HttpRequestAz osztálynak külön belső osztálya van erre BodyPublisher. Bár technikailag ez egy olyan interfész, amely több megvalósítással rendelkezik, amelyet az alábbiakban tárgyalunk

És kezdjük a legegyszerűbbvel - a kérelmező szerv hiányával. Igen, előfordul.

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

Egyszerű és szép.

3.2 ofString()

A második leggyakoribb lehetőség egy karakterlánc átadása a kérés törzseként. Ez nagyon egyszerűen történik:

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

Egyébként beállíthatja az átvitt karakterlánc kódolását. Nagyon hasznos lehet, ha a http-kiszolgáló, amelyre a kérést küldi, nem működik UTF8-on.

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

3.3 ofFile()

Végül csatolhat egy fájlt a POST kéréshez . Az avatarod általában így töltődnek fel a szerverre. Ehhez meg kell hívnia a metódust ofFile(), ahol Patha helyi fájlt át kell vinni:

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

Egy másik gyakori forgatókönyv az, hogy bájtkészletet küldenek a kiszolgálónak. Például szerializált egy objektumot bájtok készleteként, titkosított valamit, vagy egyszerűen csak adatpuffert szeretne küldeni. Ehhez kell egy módszer .ofByteArray().

Ez a módszer egy bájttömböt vesz paraméterként. Példa:

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

Végül, az utolsó, de nem utolsósorban érdekes forgatókönyv a POST-kérésInputStream csatolása .

Ehhez van egy speciális funkció ofInputStream(). És nagyon okos. Lehetővé teszi az adatfolyamról adatfolyamra történő adatátvitel megszervezését, adatfolyam csatolását egy még meg sem nyitott POS kéréshez .

A függvénynek át kell adnia egy függvényt ofInputStream(), amely ennek eredményeként egy adatfolyamot ad vissza InputStream.

Példa:

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

Nem vettem a fáradságot, hogy bekerítsem itt a kertet, de azt hiszem, érti az elvet. Miért tették ezt? Szinte mindig használhatja a ofByteArray(). De ha aszinkron módon szeretne adatokat küldeni, vagy valamilyen különösen összetett forgatókönyvet kell megvalósítania, akkor ezt a módszert használhatja.

Hozzászólások
  • Népszerű
  • Új
  • Régi
Hozzászólás írásához be kell jelentkeznie
Ennek az oldalnak még nincsenek megjegyzései