Skip to content

Commit e64aaf1

Browse files
author
Evgeniy Sinev
committed
#2 Added gson support
1 parent b3b6de9 commit e64aaf1

File tree

2 files changed

+76
-1
lines changed

2 files changed

+76
-1
lines changed

pom.xml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,18 @@
9898
<dependency>
9999
<groupId>com.fasterxml.jackson.core</groupId>
100100
<artifactId>jackson-databind</artifactId>
101-
<version>2.9.9</version>
101+
<version>2.9.10.1</version>
102102
<optional>true</optional>
103103
<scope>provided</scope>
104104
</dependency>
105105

106+
<dependency>
107+
<groupId>com.google.code.gson</groupId>
108+
<artifactId>gson</artifactId>
109+
<version>2.8.6</version>
110+
<scope>provided</scope>
111+
</dependency>
112+
106113
<dependency>
107114
<groupId>javax.servlet</groupId>
108115
<artifactId>javax.servlet-api</artifactId>
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.payneteasy.apiservlet;
2+
3+
import com.google.gson.Gson;
4+
import org.slf4j.Logger;
5+
import org.slf4j.LoggerFactory;
6+
7+
import javax.servlet.http.HttpServlet;
8+
import javax.servlet.http.HttpServletRequest;
9+
import javax.servlet.http.HttpServletResponse;
10+
import java.io.BufferedReader;
11+
import java.io.IOException;
12+
import java.util.UUID;
13+
14+
public class GsonApiServlet<I, O> extends HttpServlet {
15+
16+
private static final Logger LOG = LoggerFactory.getLogger(GsonApiServlet.class);
17+
18+
private final IApiCall<I, O> apiCall;
19+
private final Class<I> requestClass;
20+
21+
22+
private final Gson gson;
23+
24+
public GsonApiServlet(IApiCall<I, O> aApiCall, Class<I> aRequestClass, Gson aGson) {
25+
apiCall = aApiCall;
26+
gson = aGson;
27+
requestClass = aRequestClass;
28+
}
29+
30+
@Override
31+
protected void doPost(HttpServletRequest aRequest, HttpServletResponse aResponse) throws IOException {
32+
String json = toJsonString(aRequest.getReader());
33+
I request = gson.fromJson(json, requestClass);
34+
35+
LOG.debug("Got {} \n{}", aRequest.getRequestURI(), json);
36+
37+
processRequest(aRequest, aResponse, request);
38+
}
39+
40+
@Override
41+
protected void doGet(HttpServletRequest aRequest, HttpServletResponse aResponse) throws IOException {
42+
processRequest(aRequest, aResponse, null);
43+
}
44+
45+
private void processRequest(HttpServletRequest aRequest, HttpServletResponse aResponse, I request) throws IOException {
46+
try {
47+
O response = apiCall.exec(request);
48+
49+
aResponse.setContentType("application/json");
50+
gson.toJson(response, aResponse.getWriter());
51+
} catch (Exception e) {
52+
String id = UUID.randomUUID().toString();
53+
LOG.error("{}: Cannot process {}", aRequest.getRequestURI(), id, e);
54+
aResponse.setHeader("UNIQUE-ERROR-ID", id);
55+
aResponse.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
56+
}
57+
}
58+
59+
private String toJsonString(BufferedReader aRequestReader) throws IOException {
60+
StringBuilder sb = new StringBuilder();
61+
String line;
62+
while ((line = aRequestReader.readLine()) != null) {
63+
sb.append(line);
64+
sb.append('\n');
65+
}
66+
return sb.toString();
67+
}
68+
}

0 commit comments

Comments
 (0)