diff --git a/libraries-2/pom.xml b/libraries-2/pom.xml
index 218bb437cb..8e493e2d05 100644
--- a/libraries-2/pom.xml
+++ b/libraries-2/pom.xml
@@ -55,11 +55,39 @@
spring-boot-starter
${spring-boot-starter.version}
-
- edu.uci.ics
- crawler4j
- ${crawler4j.version}
-
+
+
+
+ com.squareup.okhttp3
+ okhttp
+ 3.14.2
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.9.9
+
+
+
+ com.google.code.gson
+ gson
+ 2.8.5
+
+
+
+ com.squareup.okhttp3
+ mockwebserver
+ 3.14.2
+ test
+
+
+
+ edu.uci.ics
+ crawler4j
+ ${crawler4j.version}
+
+
diff --git a/libraries-2/src/test/java/com/baeldung/okhttp/ResponseDecoderUnitTest.java b/libraries-2/src/test/java/com/baeldung/okhttp/ResponseDecoderUnitTest.java
new file mode 100644
index 0000000000..11a295031a
--- /dev/null
+++ b/libraries-2/src/test/java/com/baeldung/okhttp/ResponseDecoderUnitTest.java
@@ -0,0 +1,102 @@
+package com.baeldung.okhttp;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.gson.Gson;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.ResponseBody;
+import okhttp3.mockwebserver.MockResponse;
+import okhttp3.mockwebserver.MockWebServer;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+import java.io.InputStreamReader;
+
+public class ResponseDecoderUnitTest {
+
+ @Rule public ExpectedException exceptionRule = ExpectedException.none();
+
+ @Rule public MockWebServer server = new MockWebServer();
+
+ SimpleEntity sampleResponse;
+
+ MockResponse mockResponse;
+
+ OkHttpClient client;
+
+ @Before
+ public void setUp() {
+ sampleResponse = new SimpleEntity("Baeldung");
+ client = new OkHttpClient.Builder().build();
+ mockResponse = new MockResponse()
+ .setResponseCode(200)
+ .setHeader("Content-Type", "application/json")
+ .setBody(new Gson().toJson(sampleResponse));
+ }
+
+ @Test
+ public void givenJacksonDecoder_whenGetStringOfResponse_thenExpectSimpleEntity() throws Exception {
+ server.enqueue(mockResponse);
+ Request request = new Request.Builder()
+ .url(server.url(""))
+ .build();
+ ResponseBody responseBody = client
+ .newCall(request)
+ .execute()
+ .body();
+
+ Assert.assertNotNull(responseBody);
+ Assert.assertNotEquals(0, responseBody.contentLength());
+
+ ObjectMapper objectMapper = new ObjectMapper();
+ SimpleEntity entity = objectMapper.readValue(responseBody.string(), SimpleEntity.class);
+
+ Assert.assertNotNull(entity);
+ Assert.assertEquals(sampleResponse.getName(), entity.getName());
+ }
+
+ @Test
+ public void givenGsonDecoder_whenGetByteStreamOfResponse_thenExpectSimpleEntity() throws Exception {
+ server.enqueue(mockResponse);
+ Request request = new Request.Builder()
+ .url(server.url(""))
+ .build();
+ ResponseBody responseBody = client
+ .newCall(request)
+ .execute()
+ .body();
+
+ Assert.assertNotNull(responseBody);
+ Assert.assertNotEquals(0, responseBody.contentLength());
+
+ Gson gson = new Gson();
+ SimpleEntity entity = gson.fromJson(new InputStreamReader(responseBody.byteStream()), SimpleEntity.class);
+
+ Assert.assertNotNull(entity);
+ Assert.assertEquals(sampleResponse.getName(), entity.getName());
+ }
+
+ @Test
+ public void givenGsonDecoder_whenGetStringOfResponse_thenExpectSimpleEntity() throws Exception {
+ server.enqueue(mockResponse);
+ Request request = new Request.Builder()
+ .url(server.url(""))
+ .build();
+ ResponseBody responseBody = client
+ .newCall(request)
+ .execute()
+ .body();
+
+ Assert.assertNotNull(responseBody);
+
+ Gson gson = new Gson();
+ SimpleEntity entity = gson.fromJson(responseBody.string(), SimpleEntity.class);
+
+ Assert.assertNotNull(entity);
+ Assert.assertEquals(sampleResponse.getName(), entity.getName());
+ }
+
+}
diff --git a/libraries-2/src/test/java/com/baeldung/okhttp/SimpleEntity.java b/libraries-2/src/test/java/com/baeldung/okhttp/SimpleEntity.java
new file mode 100644
index 0000000000..211e43e556
--- /dev/null
+++ b/libraries-2/src/test/java/com/baeldung/okhttp/SimpleEntity.java
@@ -0,0 +1,22 @@
+package com.baeldung.okhttp;
+
+public class SimpleEntity {
+ protected String name;
+
+ public SimpleEntity(String name) {
+ this.name = name;
+ }
+
+ //no-arg constructor, getters and setters here
+
+ public SimpleEntity() {
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}