Skip to content

Instantly share code, notes, and snippets.

@bric3
Created July 23, 2020 10:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bric3/084eee2b6ce2b399d5a41a38784914d4 to your computer and use it in GitHub Desktop.
Save bric3/084eee2b6ce2b399d5a41a38784914d4 to your computer and use it in GitHub Desktop.
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.jaxrs.cfg.EndpointConfigBase;
import com.fasterxml.jackson.jaxrs.cfg.ObjectWriterInjector;
import com.fasterxml.jackson.jaxrs.cfg.ObjectWriterModifier;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.Provider;
@Provider
public class OnDemandJsonPrettyPrintingFilter implements ContainerResponseFilter {
public static String X_COMPANY_PRETTY_PRINT = "X-Company-Pretty-Print";
public static String PRETTY_PRINT = "pretty-print";
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) {
if ("true".equalsIgnoreCase(requestContext.getUriInfo()
.getQueryParameters()
.getFirst(PRETTY_PRINT))
|| "true".equalsIgnoreCase(requestContext.getHeaders().getFirst(X_COMPANY_PRETTY_PRINT))) {
ObjectWriterInjector.set(IndentingModifier.INSTANCE);
}
}
private static class IndentingModifier extends ObjectWriterModifier {
private static ObjectWriterModifier INSTANCE = new IndentingModifier();
@Override
public ObjectWriter modify(EndpointConfigBase<?> endpointConfigBase,
MultivaluedMap<String, Object> multivaluedMap,
Object valueToWrite,
ObjectWriter objectWriter,
JsonGenerator jsonGenerator) {
jsonGenerator.useDefaultPrettyPrinter();
return objectWriter;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment