diff --git a/src/main/java/com/commafeed/frontend/rest/JsonProvider.java b/src/main/java/com/commafeed/frontend/rest/JsonProvider.java index 1fed4d43..29cf2b6e 100644 --- a/src/main/java/com/commafeed/frontend/rest/JsonProvider.java +++ b/src/main/java/com/commafeed/frontend/rest/JsonProvider.java @@ -6,9 +6,11 @@ import java.io.OutputStream; import java.lang.annotation.Annotation; import java.lang.reflect.Type; +import javax.servlet.http.HttpServletRequest; import javax.ws.rs.Consumes; import javax.ws.rs.Produces; import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ext.MessageBodyReader; @@ -19,6 +21,7 @@ import org.apache.http.HttpHeaders; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectWriter; @Provider @Consumes(MediaType.APPLICATION_JSON) @@ -30,6 +33,9 @@ public class JsonProvider implements MessageBodyReader, MessageBodyWrite private static final ObjectMapper MAPPER = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + @Context + private HttpServletRequest request; + @Override public void writeTo(Object value, Class type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap httpHeaders, OutputStream entityStream) throws IOException { @@ -38,10 +44,29 @@ public class JsonProvider implements MessageBodyReader, MessageBodyWrite httpHeaders.putSingle(HttpHeaders.CACHE_CONTROL, CACHE_CONTROL_VALUE); httpHeaders.putSingle(HttpHeaders.PRAGMA, CACHE_CONTROL_VALUE); - getMapper().writeValue(entityStream, value); + ObjectWriter writer = getMapper().writer(); + if (hasPrettyPrint(annotations)) { + writer = writer.withDefaultPrettyPrinter(); + } + writer.writeValue(entityStream, value); } + private boolean hasPrettyPrint(Annotation[] annotations) { + boolean prettyPrint = false; + + for (Annotation annotation : annotations) { + if (PrettyPrint.class.equals(annotation.annotationType())) { + prettyPrint = true; + break; + } + } + if (!prettyPrint && request != null) { + prettyPrint = Boolean.parseBoolean(request.getParameter("pretty")); + } + return prettyPrint; + } + @Override public Object readFrom(Class type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap httpHeaders, InputStream entityStream) throws IOException, WebApplicationException { diff --git a/src/main/java/com/commafeed/frontend/rest/PrettyPrint.java b/src/main/java/com/commafeed/frontend/rest/PrettyPrint.java new file mode 100644 index 00000000..5498d48a --- /dev/null +++ b/src/main/java/com/commafeed/frontend/rest/PrettyPrint.java @@ -0,0 +1,12 @@ +package com.commafeed.frontend.rest; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ ElementType.METHOD }) +@Retention(RetentionPolicy.RUNTIME) +public @interface PrettyPrint { + +} diff --git a/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java b/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java index 2bcda43f..7d1dac29 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java @@ -227,6 +227,7 @@ public class AdminREST extends AbstractREST { @Path("/metrics") @GET + @PrettyPrint @ApiOperation(value = "Retrieve server metrics") public Response getMetrics() { return Response.ok(metrics).build();