diff --git a/core/src/main/java/io/confluent/rest/Application.java b/core/src/main/java/io/confluent/rest/Application.java index f82b9fdb7b..711026c15a 100644 --- a/core/src/main/java/io/confluent/rest/Application.java +++ b/core/src/main/java/io/confluent/rest/Application.java @@ -15,6 +15,7 @@ */ package io.confluent.rest; +import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.jaxrs.base.JsonParseExceptionMapper; import org.eclipse.jetty.server.Handler; @@ -131,7 +132,9 @@ protected void doStop() throws Exception { public void configureBaseApplication(Configurable config) { RestConfig restRestConfig = getConfiguration(); - config.register(JacksonMessageBodyProvider.class); + ObjectMapper jsonMapper = getJsonMapper(); + JacksonMessageBodyProvider jsonProvider = new JacksonMessageBodyProvider(jsonMapper); + config.register(jsonProvider); config.register(JsonParseExceptionMapper.class); config.register(ValidationFeature.class); @@ -146,6 +149,16 @@ public T getConfiguration() { return this.config; } + /** + * Gets a JSON ObjectMapper to use for (de)serialization of request/response entities. Override + * this to configure the behavior of the serializer. One simple example of customization is to + * set the INDENT_OUTPUT flag to make the output more readable. The default is a default + * Jackson ObjectMapper. + */ + protected ObjectMapper getJsonMapper() { + return new ObjectMapper(); + } + /** * Start the server (creating it if necessary). * @throws Exception diff --git a/core/src/main/java/io/confluent/rest/validation/JacksonMessageBodyProvider.java b/core/src/main/java/io/confluent/rest/validation/JacksonMessageBodyProvider.java index f2964d54c0..fc8a70b49b 100644 --- a/core/src/main/java/io/confluent/rest/validation/JacksonMessageBodyProvider.java +++ b/core/src/main/java/io/confluent/rest/validation/JacksonMessageBodyProvider.java @@ -43,6 +43,10 @@ public JacksonMessageBodyProvider() { setMapper(new ObjectMapper()); } + public JacksonMessageBodyProvider(ObjectMapper mapper) { + setMapper(mapper); + } + @Override protected boolean hasMatchingMediaType(MediaType mediaType) { return super.hasMatchingMediaType(mediaType) ||