Http Json Rest Clienthttps://www.std.ch/blog/java/jsonrestclient?&atomFri, 29 Mar 2024 14:00:46 +0000stack.ch
https://stack.ch/
bde40f1a-edd4-11ee-8c11-005056bb85fbSimtech AG - Blog - Java Blogs - Http Json Rest Client
https://www.std.ch/blog/java/jsonrestclient
bde41085-edd4-11ee-8c11-005056bb85fbFri, 29 Mar 2024 14:00:46 +0000Json Rest Client
https://www.std.ch/blog/java/jsonrestclient
bde411ea-edd4-11ee-8c11-005056bb85fbFri, 29 Mar 2024 14:00:46 +0000
https://www.std.ch/blog/java/jsonrestclient
bde4134e-edd4-11ee-8c11-005056bb85fbFri, 29 Mar 2024 14:00:46 +0000Moderne Server Applikationen bieten Json Rest Endpoints für die Interaktion mit Clients an. Json Rest Endpoints basieren in der Regel auf dem Http Protokoll. Java bietet viele verschiedene Varianten für die Programmierung von Http Clients an, die einfachste Variante bietet die Klasse java.net.URL. Den Einsatz von java.net.URL findet man unter dem Blog Mockito Unit Test mit Eclipse Maven und der Klasse UrlFakeRandomImpl.In diesem Blog verwenden wir den Java Standard java.net.http.HttpClient, welcher seit Java 11 vorhanden ist.
https://www.std.ch/blog/java/jsonrestclient
bde41ce8-edd4-11ee-8c11-005056bb85fbFri, 29 Mar 2024 14:00:46 +0000Für diesen Blog verwenden wir default den Json Random Rest Service Endpoint. Die Beschreibung hierzu findet man unter dem Link Json Random Service.
https://www.std.ch/blog/java/jsonrestclient
bde4254d-edd4-11ee-8c11-005056bb85fbFri, 29 Mar 2024 14:00:46 +0000Das folgende Listing zeigt die Klasse ch.std.blog.rest.clientJsonRestClient:package ch.std.blog.rest.client;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.util.HashMap;
import java.util.Map;
import ch.std.blog.rest.json.JsonBodyHandler;
public class JsonRestClient {
public static void main(String[] args) throws IOException, InterruptedException {
String url = "https://www.simtech-ag.ch/std-ajax/randomservice?min=0&max=1000";
if (args.length > 1) {
url = args[0];
}
// create a client
var client = HttpClient.newHttpClient();
// create a request
var request = HttpRequest.newBuilder(URI.create(url))
.header("accept", "application/json").build();
// use the client to send the request
var response = client.send(request, new JsonBodyHandler<>(HashMap.class));
Map<?,?> responseMap = response.body().get();
System.out.println(responseMap);
}
}
https://www.std.ch/blog/java/jsonrestclient
bde42a82-edd4-11ee-8c11-005056bb85fbFri, 29 Mar 2024 14:00:46 +0000Der HttpClient übernimmt nur die Kommunikation via Http Protokoll. Die Auswertung der Json Response übernimmt die Klasse ch.std.blog.rest.json.JsonBodyHandler:package ch.std.blog.rest.json;
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
import java.net.http.HttpResponse;
import java.util.function.Supplier;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonBodyHandler<T> implements HttpResponse.BodyHandler<Supplier<T>> {
private static final ObjectMapper om = new ObjectMapper();
private final Class<T> targetClass;
public JsonBodyHandler(Class<T> targetClass) {
this.targetClass = targetClass;
}
@Override
public HttpResponse.BodySubscriber<Supplier<T>> apply(HttpResponse.ResponseInfo responseInfo) {
return asJSON(this.targetClass);
}
public static <W> HttpResponse.BodySubscriber<Supplier<W>> asJSON(Class<W> targetType) {
HttpResponse.BodySubscriber<InputStream> upstream = HttpResponse.BodySubscribers.ofInputStream();
return HttpResponse.BodySubscribers.mapping(
upstream,
inputStream -> toSupplierOfType(inputStream, targetType));
}
public static <W> Supplier<W> toSupplierOfType(InputStream inputStream, Class<W> targetType) {
return () -> {
try (InputStream stream = inputStream) {
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.readValue(stream, targetType);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
};
}
}
https://www.std.ch/blog/java/jsonrestclient
bde43118-edd4-11ee-8c11-005056bb85fbFri, 29 Mar 2024 14:00:46 +0000Für die Konversion der Json Textdaten in die java.util.Map verwenden wir den Open Source Jackson ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper). Hierzu haben wir im Eclipse Projekt die folgenden Jar Dateien referenziert:jackson-annotations-2.12.3.jarjackson-core-2.12.3.jarjackson-databind-2.12.3.jarDie Dateien findet man im Eclipse Projekt oder über die Jar Download Site https://jar-download.com.
https://www.std.ch/blog/java/jsonrestclient
bde433c1-edd4-11ee-8c11-005056bb85fbFri, 29 Mar 2024 14:00:46 +0000Das komplette Eclipse Projekt findet man unter dem Link jsonrestclient.zip.
https://www.std.ch/blog/java/jsonrestclient
bde43ac2-edd4-11ee-8c11-005056bb85fbFri, 29 Mar 2024 14:00:46 +0000War dieser Blog für Sie wertvoll. Wir danken für jede Anregung und FeedbackÜber uns
https://www.std.ch/about
Fri, 29 Mar 2024 14:00:46 +0000bde43ea9-edd4-11ee-8c11-005056bb85fbAktuell
https://www.std.ch/
Fri, 29 Mar 2024 14:00:46 +0000bde43faf-edd4-11ee-8c11-005056bb85fbAGB
https://www.std.ch/agb
Fri, 29 Mar 2024 14:00:46 +0000bde440ee-edd4-11ee-8c11-005056bb85fbBildungswege
https://www.std.ch/bildungswege
Fri, 29 Mar 2024 14:00:46 +0000bde441ab-edd4-11ee-8c11-005056bb85fbBlog
https://www.std.ch/blog
Fri, 29 Mar 2024 14:00:46 +0000bde442a4-edd4-11ee-8c11-005056bb85fbRufen Sie mich an
https://www.std.ch/callus
Fri, 29 Mar 2024 14:00:46 +0000bde44360-edd4-11ee-8c11-005056bb85fbCharts
https://www.std.ch/charts
Fri, 29 Mar 2024 14:00:46 +0000bde4446f-edd4-11ee-8c11-005056bb85fbConsulting
https://www.std.ch/consulting
Fri, 29 Mar 2024 14:00:46 +0000bde44540-edd4-11ee-8c11-005056bb85fbKontakt
https://www.std.ch/contact
Fri, 29 Mar 2024 14:00:46 +0000bde44632-edd4-11ee-8c11-005056bb85fbAusbildung/Kurse
https://www.std.ch/education
Fri, 29 Mar 2024 14:00:46 +0000bde446f2-edd4-11ee-8c11-005056bb85fbSoftware Engineering
https://www.std.ch/engineering
Fri, 29 Mar 2024 14:00:46 +0000bde447ee-edd4-11ee-8c11-005056bb85fbFreelancer
https://www.std.ch/freelancer
Fri, 29 Mar 2024 14:00:46 +0000bde448a3-edd4-11ee-8c11-005056bb85fbImpressum
https://www.std.ch/impressum
Fri, 29 Mar 2024 14:00:46 +0000bde449a0-edd4-11ee-8c11-005056bb85fbKursleiter
https://www.std.ch/kursleiter
Fri, 29 Mar 2024 14:00:46 +0000bde44a54-edd4-11ee-8c11-005056bb85fbNetzwerk
https://www.std.ch/network
Fri, 29 Mar 2024 14:00:46 +0000bde44b50-edd4-11ee-8c11-005056bb85fbReferenzen
https://www.std.ch/references
Fri, 29 Mar 2024 14:00:46 +0000bde44c45-edd4-11ee-8c11-005056bb85fbSitemap
https://www.std.ch/sitemap
Fri, 29 Mar 2024 14:00:46 +0000bde44cfa-edd4-11ee-8c11-005056bb85fbTools
https://www.std.ch/tools
Fri, 29 Mar 2024 14:00:46 +0000bde44df2-edd4-11ee-8c11-005056bb85fbVision
https://www.std.ch/vision
Fri, 29 Mar 2024 14:00:46 +0000bde44ea6-edd4-11ee-8c11-005056bb85fb