Java Blog

HTTP Client API in Java 9

Der HTTP-Standard ist schon relativ alt und die Ursprünge wurden Anfang der 1990er Jahre gelegt. Offiziell wurde die Version 1.0 im Jahr 1996 verabschiedet, also etwa zu gleichen Zeit, als Java 1.0 erschien. 2015 wurde HTTP/2 verabschiedet, und viele Verbesserungen eingeführt. Die Java-Klassen rund um HTTP wurden allerdings nicht aktualisiert, sodass quelloffene Bibliothek die Lücken füllen.

Statt für Java 9 die existierenden HTTP-Klassen wie HttpURLConnection zu erweitern, hat Oracle ein ganz neues Paket eingeführt. Allerdings ist das noch nicht wirklich „freigeschaltet“, sondern ist im „Brutkasten“ (engl. incubator) und ein Modul jdk.incubator.httpclient muss bewusst hinzugenommen werden – in Java 10 soll es dann umbenannt werden, wobei sich die API noch ändern kann.

Die wesentlichen Typen sind:

Schauen wir uns ein Beispiel an:

try {

  URI uri = new URI( "https://tutego.de/" );

  HttpRequest httpRequest = HttpRequest.newBuilder().uri( uri ).GET().build();

  HttpResponse<String> response = HttpClient.newHttpClient().send(

                                    httpRequest, HttpResponse.BodyHandler.asString() );

  System.out.println( response.body() );

}

catch ( URISyntaxException | IOException | InterruptedException e ) {

  e.printStackTrace();

}

Um das Programm unter Java 9 laufen zu lassen ist unerlässlich –add-modules jdk.incubator.httpclient auf der Kommandozeile aufzunehmen.

Die Methoden von HttpRequest sind allesamt abstrakt:

Führt der HttpClient die Anfrage aus, bekommen wir ein HttpResponse; die Klasse hat folgende (abstrakte) Methoden:

Was die Methode body() für einen Typ liefert bestimmt die Parametrisierung von HttpResponse<T>, und die ergibt sich aus dem übergebenen BodyHandler<T>  der HttpClient-Methode send(…):

Der BodyHandler ist eine funktionale Schnittstelle mit ein paar statischen Methoden für vordefinierte Implementierungen: