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
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION