Skip to content

Commit d73979f

Browse files
committed
#BAEL-2802:
Implement response decoder for ok http client and apply review notes
1 parent ea4c34b commit d73979f

3 files changed

Lines changed: 208 additions & 0 deletions

File tree

libraries-2/pom.xml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,33 @@
5555
<artifactId>spring-boot-starter</artifactId>
5656
<version>${spring-boot-starter.version}</version>
5757
</dependency>
58+
59+
<!-- Dependencies for response decoder with okhttp -->
60+
<dependency>
61+
<groupId>com.squareup.okhttp3</groupId>
62+
<artifactId>okhttp</artifactId>
63+
<version>3.14.2</version>
64+
</dependency>
65+
66+
<dependency>
67+
<groupId>com.fasterxml.jackson.core</groupId>
68+
<artifactId>jackson-databind</artifactId>
69+
<version>2.9.9</version>
70+
</dependency>
71+
72+
<dependency>
73+
<groupId>com.google.code.gson</groupId>
74+
<artifactId>gson</artifactId>
75+
<version>2.8.5</version>
76+
</dependency>
77+
78+
<dependency>
79+
<groupId>com.squareup.okhttp3</groupId>
80+
<artifactId>mockwebserver</artifactId>
81+
<version>3.14.2</version>
82+
<scope>test</scope>
83+
</dependency>
84+
5885
</dependencies>
5986

6087
<properties>
Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
package com.baeldung.okhttp;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import com.google.gson.Gson;
5+
import okhttp3.OkHttpClient;
6+
import okhttp3.Request;
7+
import okhttp3.ResponseBody;
8+
import okhttp3.mockwebserver.MockResponse;
9+
import okhttp3.mockwebserver.MockWebServer;
10+
import org.junit.Assert;
11+
import org.junit.Before;
12+
import org.junit.Rule;
13+
import org.junit.Test;
14+
import org.junit.rules.ExpectedException;
15+
16+
import java.io.InputStreamReader;
17+
18+
public class ResponseDecoderUnitTest {
19+
20+
@Rule
21+
public ExpectedException exceptionRule = ExpectedException.none();
22+
23+
@Rule
24+
public MockWebServer server = new MockWebServer();
25+
26+
SimpleEntity sampleResponse;
27+
28+
MockResponse mockResponse;
29+
30+
OkHttpClient client;
31+
32+
33+
@Before
34+
public void setUp() {
35+
sampleResponse = new SimpleEntity("Baeldung");
36+
client = new OkHttpClient.Builder()
37+
.build();
38+
mockResponse = new MockResponse()
39+
.setResponseCode(200)
40+
.setHeader("Content-Type", "application/json")
41+
.setBody(new Gson().toJson(sampleResponse));
42+
}
43+
44+
@Test
45+
public void givenJacksonDecoder_whenGetByteStreamOfResponse_thenExpectSimpleEntity() throws Exception {
46+
47+
server.enqueue(mockResponse);
48+
49+
Request request = new Request.Builder()
50+
.url(server.url(""))
51+
.build();
52+
ResponseBody responseBody = client.newCall(request).execute().body();
53+
54+
Assert.assertNotNull(responseBody);
55+
Assert.assertNotEquals(0, responseBody.contentLength());
56+
57+
ObjectMapper objectMapper = new ObjectMapper();
58+
SimpleEntity response = objectMapper.readValue(responseBody.byteStream()
59+
, SimpleEntity.class);
60+
61+
Assert.assertEquals(sampleResponse.getName(), response.getName());
62+
}
63+
64+
@Test
65+
public void givenJacksonDecoder_whenGetStringOfResponse_thenExpectSimpleEntity() throws Exception {
66+
67+
server.enqueue(mockResponse);
68+
69+
Request request = new Request.Builder()
70+
.url(server.url(""))
71+
.build();
72+
ResponseBody responseBody = client.newCall(request).execute().body();
73+
74+
Assert.assertNotNull(responseBody);
75+
Assert.assertNotEquals(0, responseBody.contentLength());
76+
77+
ObjectMapper objectMapper = new ObjectMapper();
78+
SimpleEntity response = objectMapper.readValue(responseBody.string(), SimpleEntity.class);
79+
80+
Assert.assertEquals(sampleResponse.getName(), response.getName());
81+
}
82+
83+
@Test
84+
public void givenJacksonDecoder_whenGetCharStreamOfResponse_thenExpectSimpleEntity() throws Exception {
85+
86+
server.enqueue(mockResponse);
87+
88+
Request request = new Request.Builder()
89+
.url(server.url(""))
90+
.build();
91+
ResponseBody responseBody = client.newCall(request).execute().body();
92+
93+
Assert.assertNotNull(responseBody);
94+
Assert.assertNotEquals(0, responseBody.contentLength());
95+
96+
ObjectMapper objectMapper = new ObjectMapper();
97+
SimpleEntity response = objectMapper.readValue(responseBody.charStream(), SimpleEntity.class);
98+
99+
Assert.assertEquals(sampleResponse.getName(), response.getName());
100+
}
101+
102+
@Test
103+
public void givenGsonDecoder_whenGetByteStreamOfResponse_thenExpectSimpleEntity() throws Exception {
104+
105+
server.enqueue(mockResponse);
106+
107+
Request request = new Request.Builder()
108+
.url(server.url(""))
109+
.build();
110+
ResponseBody responseBody = client.newCall(request).execute().body();
111+
112+
Assert.assertNotNull(responseBody);
113+
Assert.assertNotEquals(0, responseBody.contentLength());
114+
115+
Gson gson = new Gson();
116+
SimpleEntity response = gson.fromJson(new InputStreamReader(responseBody.byteStream())
117+
, SimpleEntity.class);
118+
119+
Assert.assertEquals(sampleResponse.getName(), response.getName());
120+
}
121+
122+
@Test
123+
public void givenGsonDecoder_whenGetStringOfResponse_thenExpectSimpleEntity() throws Exception {
124+
125+
server.enqueue(mockResponse);
126+
127+
Request request = new Request.Builder()
128+
.url(server.url(""))
129+
.build();
130+
ResponseBody responseBody = client.newCall(request).execute().body();
131+
132+
Assert.assertNotNull(responseBody);
133+
134+
Gson gson = new Gson();
135+
SimpleEntity response = gson.fromJson(responseBody.string(), SimpleEntity.class);
136+
137+
Assert.assertEquals(sampleResponse.getName(), response.getName());
138+
}
139+
140+
@Test
141+
public void givenGsonDecoder_whenGetCharStreamOfResponse_thenExpectSimpleEntity() throws Exception {
142+
143+
server.enqueue(mockResponse);
144+
145+
Request request = new Request.Builder()
146+
.url(server.url(""))
147+
.build();
148+
149+
ResponseBody responseBody = client.newCall(request).execute().body();
150+
151+
Assert.assertNotNull(responseBody);
152+
153+
Gson gson = new Gson();
154+
SimpleEntity response = gson.fromJson(responseBody.charStream(), SimpleEntity.class);
155+
156+
Assert.assertEquals(sampleResponse.getName(), response.getName());
157+
}
158+
159+
160+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.baeldung.okhttp;
2+
3+
public class SimpleEntity {
4+
protected String name;
5+
6+
public SimpleEntity(String name) {
7+
this.name = name;
8+
}
9+
10+
//no-arg constructor, getters and setters here
11+
public SimpleEntity() {
12+
}
13+
14+
public String getName() {
15+
return name;
16+
}
17+
18+
public void setName(String name) {
19+
this.name = name;
20+
}
21+
}

0 commit comments

Comments
 (0)