diff --git a/core-java-modules/core-java-11-3/pom.xml b/core-java-modules/core-java-11-3/pom.xml index b4a4591b28..ccccae5ba1 100644 --- a/core-java-modules/core-java-11-3/pom.xml +++ b/core-java-modules/core-java-11-3/pom.xml @@ -14,6 +14,20 @@ 1.0.0-SNAPSHOT ../../pom.xml + + + + com.google.code.gson + gson + ${gson.version} + + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + @@ -32,6 +46,8 @@ 11 11 + 2.14.1 + 2.10 \ No newline at end of file diff --git a/core-java-modules/core-java-11-3/src/main/java/com/baeldung/httppojo/Todo.java b/core-java-modules/core-java-11-3/src/main/java/com/baeldung/httppojo/Todo.java new file mode 100644 index 0000000000..01a1ee5c52 --- /dev/null +++ b/core-java-modules/core-java-11-3/src/main/java/com/baeldung/httppojo/Todo.java @@ -0,0 +1,73 @@ +package com.baeldung.httppojo; + +import java.util.Objects; + +public class Todo { + + int userId; + int id; + String title; + boolean completed; + + public Todo() { + } + + public Todo(int userId, int id, String title, boolean completed) { + this.userId = userId; + this.id = id; + this.title = title; + this.completed = completed; + } + + public int getUserId() { + return userId; + } + + public void setUserId(int userId) { + this.userId = userId; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public boolean isCompleted() { + return completed; + } + + public void setCompleted(boolean completed) { + this.completed = completed; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + Todo todo = (Todo) o; + return userId == todo.userId && id == todo.id && completed == todo.completed && Objects.equals(title, todo.title); + } + + @Override + public int hashCode() { + return Objects.hash(userId, id, title, completed); + } + + @Override + public String toString() { + return "{" + "userId=" + userId + ", id=" + id + ", title='" + title + '\'' + ", completed=" + completed + '}'; + } +} diff --git a/core-java-modules/core-java-11-3/src/main/java/com/baeldung/httppojo/TodoAppClient.java b/core-java-modules/core-java-11-3/src/main/java/com/baeldung/httppojo/TodoAppClient.java new file mode 100644 index 0000000000..c2295d97ce --- /dev/null +++ b/core-java-modules/core-java-11-3/src/main/java/com/baeldung/httppojo/TodoAppClient.java @@ -0,0 +1,107 @@ +package com.baeldung.httppojo; + +import java.io.IOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpResponse.BodyHandlers; +import java.util.List; +import java.util.concurrent.CompletionException; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; + +public class TodoAppClient { + + ObjectMapper objectMapper = new ObjectMapper(); + + Gson gson = new GsonBuilder().create(); + + public String sampleApiRequest() throws Exception { + HttpClient client = HttpClient.newHttpClient(); + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("https://jsonplaceholder.typicode.com/todos")) + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + + return response.body(); + + } + + public Todo syncGson() throws Exception { + String response = sampleApiRequest(); + + List todo = gson.fromJson(response, new TypeToken>() { + }.getType()); + + return todo.get(1); + + } + + public Todo syncJackson() throws Exception { + String response = sampleApiRequest(); + + Todo[] todo = objectMapper.readValue(response, Todo[].class); + + return todo[1]; + + } + + public Todo asyncJackson() throws Exception { + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("https://jsonplaceholder.typicode.com/todos")) + .build(); + + TodoAppClient todoAppClient = new TodoAppClient(); + + List todo = HttpClient.newHttpClient() + .sendAsync(request, BodyHandlers.ofString()) + .thenApply(HttpResponse::body) + .thenApply(todoAppClient::readValueJackson) + .get(); + + return todo.get(1); + + } + + public Todo asyncGson() throws Exception { + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("https://jsonplaceholder.typicode.com/todos")) + .build(); + TodoAppClient todoAppClient = new TodoAppClient(); + + List todo = HttpClient.newHttpClient() + .sendAsync(request, BodyHandlers.ofString()) + .thenApply(HttpResponse::body) + .thenApply(todoAppClient::readValueGson) + .get(); + + return todo.get(1); + + } + + List readValueJackson(String content) { + + try { + return objectMapper.readValue(content, new TypeReference>() { + }); + } catch (IOException ioe) { + throw new CompletionException(ioe); + } + } + + List readValueGson(String content) { + + return gson.fromJson(content, new TypeToken>() { + }.getType()); + + } + +} \ No newline at end of file diff --git a/core-java-modules/core-java-11-3/src/test/java/com/baeldung/httppojo/HttpClientPojoClassUnitTest.java b/core-java-modules/core-java-11-3/src/test/java/com/baeldung/httppojo/HttpClientPojoClassUnitTest.java new file mode 100644 index 0000000000..a364a8d27e --- /dev/null +++ b/core-java-modules/core-java-11-3/src/test/java/com/baeldung/httppojo/HttpClientPojoClassUnitTest.java @@ -0,0 +1,45 @@ +package com.baeldung.httppojo; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class HttpClientPojoClassUnitTest { + + Todo expectedTodo = new Todo(1, 2, "quis ut nam facilis et officia qui", false); + + @Test + public void givenSampleApiCall_whenResponseIsMappedByGson_thenCompareResponseMappedByGson() throws Exception { + TodoAppClient sampleGson = new TodoAppClient(); + + assertEquals(expectedTodo, sampleGson.syncGson()); + + } + + @Test + public void givenSampleApiCall_whenResponseIsMappedByJackson_thenCompareResponseMappedByJackson() throws Exception { + TodoAppClient sampleJackson = new TodoAppClient(); + + assertEquals(expectedTodo, sampleJackson.syncJackson()); + } + + @Test + public void givenSampleRestApi_whenApiIsConsumedByHttpClient_thenCompareJsonString() throws Exception { + TodoAppClient sampleTest = new TodoAppClient(); + assertNotNull(sampleTest.sampleApiRequest()); + + } + + @Test + public void givenSampleApiAsyncCall_whenResponseIsMappedByJackson_thenCompareResponseMappedByJackson() throws Exception { + TodoAppClient sampleAsynJackson = new TodoAppClient(); + assertEquals(expectedTodo, sampleAsynJackson.asyncJackson()); + } + + @Test + public void givenSampleApiAsyncCall_whenResponseIsMappedByGson_thenCompareResponseMappedByGson() throws Exception { + TodoAppClient sampleAsynGson = new TodoAppClient(); + assertEquals(expectedTodo, sampleAsynGson.asyncGson()); + } + +}