diff --git a/libraries-2/pom.xml b/libraries-2/pom.xml
index 6303c0cab5..d3c0f7204b 100644
--- a/libraries-2/pom.xml
+++ b/libraries-2/pom.xml
@@ -55,6 +55,33 @@
spring-boot-starter
${spring-boot-starter.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
+
+
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..e9f829abe4
--- /dev/null
+++ b/libraries-2/src/test/java/com/baeldung/okhttp/ResponseDecoderUnitTest.java
@@ -0,0 +1,160 @@
+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_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());
+
+ ObjectMapper objectMapper = new ObjectMapper();
+ SimpleEntity response = objectMapper.readValue(responseBody.byteStream()
+ , SimpleEntity.class);
+
+ Assert.assertEquals(sampleResponse.getName(), response.getName());
+ }
+
+ @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 response = objectMapper.readValue(responseBody.string(), SimpleEntity.class);
+
+ Assert.assertEquals(sampleResponse.getName(), response.getName());
+ }
+
+ @Test
+ public void givenJacksonDecoder_whenGetCharStreamOfResponse_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 response = objectMapper.readValue(responseBody.charStream(), SimpleEntity.class);
+
+ Assert.assertEquals(sampleResponse.getName(), response.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 response = gson.fromJson(new InputStreamReader(responseBody.byteStream())
+ , SimpleEntity.class);
+
+ Assert.assertEquals(sampleResponse.getName(), response.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 response = gson.fromJson(responseBody.string(), SimpleEntity.class);
+
+ Assert.assertEquals(sampleResponse.getName(), response.getName());
+ }
+
+ @Test
+ public void givenGsonDecoder_whenGetCharStreamOfResponse_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 response = gson.fromJson(responseBody.charStream(), SimpleEntity.class);
+
+ Assert.assertEquals(sampleResponse.getName(), response.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..4c7cae6fdc
--- /dev/null
+++ b/libraries-2/src/test/java/com/baeldung/okhttp/SimpleEntity.java
@@ -0,0 +1,21 @@
+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;
+ }
+}