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
Naprawdę uwielbiam...
Monitorujemy cenę IntelliJ'a ;-)
Chillout na 80%
Brak komentarzy:
Prześlij komentarz