package focusedCrawler.rest; import java.util.concurrent.TimeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.codahale.metrics.json.MetricsModule; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import spark.ResponseTransformer; import spark.Route; public class Transformers { private static final Logger logger = LoggerFactory.getLogger(Transformers.class); private static ResponseTransformer jsonTransformer = new ResponseTransformer() { private ObjectMapper jsonMapper; { final TimeUnit rateUnit = TimeUnit.SECONDS; final TimeUnit durationUnit = TimeUnit.MILLISECONDS; final boolean showSamples = false; jsonMapper = new ObjectMapper() .registerModule(new MetricsModule(rateUnit, durationUnit, showSamples)); } @Override public String render(Object model) { try { return jsonMapper.writeValueAsString(model); } catch (JsonProcessingException e) { String msg = "Failed to serialize response as JSON"; logger.error(msg, e); throw new RuntimeException(msg, e); } } }; public static Route text(Route route) { return (req, res) -> { res.header("Content-Type", "text/plain"); Object result = route.handle(req, res); return result instanceof String ? result : result.toString(); }; } public static Route json(Route route) { return (req, res) -> { res.header("Content-Type", "application/json"); return jsonTransformer.render(route.handle(req, res)); }; } }