niedziela, marca 21, 2021

"Nowy" java.net.http.HttpClient jest cool :-)

Kilka dni temu w pracy musiałem zrobić GET z body....
Czyli wysłać request typu GET, ale taki w którym jest body.

Wielu zakrzyknie "co tu się odwala? GET nie może mieć body".

Może ;-)

Tzn zawsze mógł, ale przez wiele lat mu nie było wolno ;-) ale teraz mu wolno, ale za to nie wszystkie biblioteki pozwalają by mógł ;-)

W Pythonie (2.7 bo nadal z niego nie wyrosłem...) to zawsze było proste, wystarczyło nadpisać metodę i wyglądało takie GET jak POST czy PUT.

W Java'ie jest gorzej.

HttpURLConnection niby pozwala ustawić metodę na GET i później ustawić DoOutput na true, ale w takim przypadku i tak zrobi POST.
RestTemplate ze Springa niby jakoś pozwala to zrobić, ale nie udało mi się go shackować.
HttpClient od Appache też podobno pozwala, ale też hackowanie jest niemiłe.

Ale w końcu w Java'ie dodano nowego klienta HTTP,  takiego który wspiera nawet HTTP/2 :-)

To java.net.http.HttpClient :-)

Jego użycie by zrobić GET z body to coś w ten deseń :

var httpClient = HttpClient.newHttpClient();
var bodyPublisher = HttpRequest.BodyPublishers.ofString("{'test':'test'");
var request = HttpRequest.newBuilder().method("GET", bodyPublisher).build();

var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
var responseBody = response.body();
Użycie send może wyrzucić parę wyjątków, głównie te z IOException i co ciekawe InterruptedException :-) bo send jest synchroniczne, jest też wersja asynchroniczna która nie wyrzuca tego drugiego (ale wyrzuca go metoda get z CompletableFuture).
Dzięki java.net.http.HttpClient byłem w stanie zrobić to co z Pythona umiałem, czyli GET z body :-)
A team z którym "gadamy" pracuje nad tym by jednak dać nam możliwość gadania przez POST ;-)
Podoba mi się ten nowy HttpClient. Daje nawet większą swobodę niż HttpURLConnection, nadal można być dość "nisko", a nie trzeba robić rzutowań....
No i wspiera HTTP/2 :-)
Ciekawe czy w Java 14 będzie wspierać HTTP/3? :-)



Podobne postybeta
Linux to jednak fajny jest ;-)
GeeCON 2015
Monitorujemy cenę IntelliJ'a ;-)
Naprawdę uwielbiam...
Lubię mieć wybór, ale nie lubię wybierać ;-)

Brak komentarzy:

Publikowanie komentarza