summaryrefslogtreecommitdiffstats
path: root/container-core
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2019-11-04 13:49:07 +0100
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2019-11-04 13:49:07 +0100
commitab0a062b954c431d5dcc2abcbca8caba856deae8 (patch)
treed0650b3685eb4dbdd162c8a7a78cca0b019a346e /container-core
parent197628b906de4fec5e341fe57041259823e3d05d (diff)
Add response type for JSON serialization using Jackson
Diffstat (limited to 'container-core')
-rw-r--r--container-core/src/main/java/com/yahoo/restapi/JacksonJsonResponse.java48
1 files changed, 48 insertions, 0 deletions
diff --git a/container-core/src/main/java/com/yahoo/restapi/JacksonJsonResponse.java b/container-core/src/main/java/com/yahoo/restapi/JacksonJsonResponse.java
new file mode 100644
index 00000000000..d3b960651b0
--- /dev/null
+++ b/container-core/src/main/java/com/yahoo/restapi/JacksonJsonResponse.java
@@ -0,0 +1,48 @@
+// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.restapi;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.yahoo.container.jdisc.HttpResponse;
+import com.yahoo.log.LogLevel;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.logging.Logger;
+
+/**
+ * A JSON response using Jackson for serialization.
+ *
+ * @author bjorncs
+ */
+public class JacksonJsonResponse<T> extends HttpResponse {
+
+ private static final Logger log = Logger.getLogger(JacksonJsonResponse.class.getName());
+ private static final ObjectMapper defaultJsonMapper = new ObjectMapper();
+
+ private final ObjectMapper jsonMapper;
+ private final T entity;
+
+ public JacksonJsonResponse(int statusCode, T entity) {
+ this(statusCode, entity, defaultJsonMapper);
+ }
+
+ public JacksonJsonResponse(int statusCode, T entity, ObjectMapper jsonMapper) {
+ super(statusCode);
+ this.entity = entity;
+ this.jsonMapper = jsonMapper;
+ }
+
+ @Override
+ public void render(OutputStream outputStream) throws IOException {
+ if (log.isLoggable(LogLevel.DEBUG)) {
+ String json = jsonMapper.writeValueAsString(entity);
+ log.log(LogLevel.DEBUG, "Writing the following JSON to response output stream:\n" + json);
+ outputStream.write(json.getBytes());
+ } else {
+ jsonMapper.writeValue(outputStream, entity);
+ }
+ }
+
+ @Override public String getContentType() { return "application/json"; }
+ public T getEntity() { return entity; }
+}