If you have already worked with ElasticSearch, you may have used a very useful companion when dealing with your curl: the "?pretty" parameter which allows you to see the JSON response well-formated. If not, have a look here, you'll thank me later: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/common-options.html
It can be usefull too to have this kind of feature in your JAX-RS project. And this "pretty" simple (...). All you have to do is create a class extending JacksonJsonProvider:
import java.io.IOException;
import java.io.OutputStream;
import javax.ws.rs.core.Context;
import org.apache.cxf.jaxrs.ext.MessageContext;
import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
public class PrettyJacksonJsonProvider extends JacksonJsonProvider {
private MessageContext mc;
public PrettyJacksonJsonProvider(ObjectMapper mapper) {
super(mapper);
}
@Context
public void setMessageContext(MessageContext context) {
this.mc = context;
}
@Override
protected JsonGenerator _createGenerator(ObjectWriter writer, OutputStream rawStream, JsonEncoding enc) throws IOException {
JsonGenerator generator = super._createGenerator(writer, rawStream, enc);
String pretty = mc.getHttpServletRequest().getParameter("pretty");
if (pretty != null && ("".equals(pretty) || "true".equals(pretty))) {
generator.useDefaultPrettyPrinter();
}
return generator;
}
}
Then, replace your previous JacksonJsonProvider by this one, start your server and enjoy the "?pretty" !Labels: cxf, jackson, jaxrs