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.
HttpRequest
Az 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 Path
a 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.
GO TO FULL VERSION