@Override public void send(final Result result) throws Throwable { rsp.send(result); }
@Override public void send(final Object result) throws Throwable { // Special case: let the default response to deal with Object refs. // once resolved it will call the Result version. Response.super.send(result); }
/** * Send an asset to the client. * * @param req Request. * @param rsp Response. * @param asset Resolve asset. * @throws Exception If send fails. */ protected void send(final Request req, final Response rsp, final Asset asset) throws Throwable { rsp.send(asset); }
@Override public void send(final Object result) throws Throwable { rsp.send(result); ref.set(result); }
@Override public void send(final Result result) throws Throwable { rsp.send(result); ref.set(result); }
@Override public void writeResponseContent(final String content) { try { rsp.send(content); } catch (Throwable ex) { throw new Err(Status.SERVER_ERROR, ex); } }
@Override public void writeResponseContent(String content) { Try.run(() -> rsp.send(content)); }
@Override public void handle(final Request req, final Response rsp) throws Throwable { String CRLF = "\r\n"; StringBuilder buffer = new StringBuilder("TRACE ").append(req.path()) .append(" ").append(req.protocol()); for (Entry<String, Mutant> entry : req.headers().entrySet()) { buffer.append(CRLF).append(entry.getKey()).append(": ") .append(entry.getValue().toList(String.class).stream().collect(Collectors.joining(", "))); } buffer.append(CRLF); rsp.type(MediaType.valueOf("message/http")); rsp.length(buffer.length()); rsp.send(buffer.toString()); }
/** * Responsible of writing the given body into the HTTP response. * * @param result The HTTP body. * @throws Exception If the response write fails. */ default void send(final @Nullable Object result) throws Throwable { if (result instanceof Result) { send((Result) result); } else if (result != null) { // wrap body Result b = Results.with(result); status().ifPresent(b::status); type().ifPresent(b::type); send(b); } else { throw new NullPointerException("Response required."); } }
@Override default void handle(final Request req, final Response rsp, final Route.Chain chain) throws Throwable { Object result = handle(); rsp.send(result); chain.next(req, rsp); }
@Override default void handle(final Request req, final Response rsp, final Route.Chain chain) throws Throwable { Object result = handle(req); rsp.send(result); chain.next(req, rsp); }
@Override public void handle(final Request req, final Response rsp) throws Throwable { rsp.status(Status.OK) .type(MediaType.plain) .header("Cache-Control", "must-revalidate,no-cache,no-store") .send("pong"); ; }
@Override public void handle(final Request req, final Response rsp) throws Throwable { Object data; Status status; if (threadDump == null) { data = "Sorry your runtime environment does not allow to dump threads."; status = Status.NOT_IMPLEMENTED; } else { final ByteArrayOutputStream output = new ByteArrayOutputStream(); threadDump.dump(output); data = output.toByteArray(); status = Status.OK; } rsp.type(MediaType.plain) .status(status) .header("Cache-Control", "must-revalidate,no-cache,no-store") .send(data); }
@Override public void handle(Request req, Response rsp, Route.Chain chain) throws Throwable { Object result = invoke(req, rsp, chain); if (!rsp.committed()) { Class<?> returnType = handler.getReturnType(); if (returnType == void.class) { rsp.status(Status.NO_CONTENT); } else { rsp.status(Status.OK); rsp.send(result); } } chain.next(req, rsp); }
@Override public void handle(final Request req, final Response rsp, final Chain chain) throws Throwable { String error = req.param("error").toOptional().orElse(""); String username = req.param("username").toOptional().orElse(""); req.set("username", username); req.set("error", error); if (loginUrl.equals(req.path())) { // default login form rsp.type(MediaType.html).send(String.format(FORM, error, callback, username)); } else { super.handle(req, rsp, chain); } }
@Override public void handle(Request req, Response rsp) throws Throwable { PrometheusMeterRegistry registry = req.require(PrometheusMeterRegistry.class); String response = registry.scrape(); rsp.type(MediaType.plain) .send(Results.ok(response)); } }
@Override public void handle(final Request req, final Response rsp) throws Throwable { String error = req.param("error").value(""); String username = req.param("username").value(""); req.set("username", username); req.set("error", error); // default login form rsp.type(MediaType.html).send(String.format(FORM, error, callback, username)); }
@Override public void handle(final Request req, final Response rsp, final Chain chain) throws Throwable { Object input = supplier.apply(req, rsp, chain); Object output = Try .apply(() -> mapper.map(input)) .recover(ClassCastException.class, input) .get(); rsp.send(output); chain.next(req, rsp); }
@Override protected void send(final Request req, final Response rsp, final Asset asset) throws Throwable { Env env = req.require(Env.class); CharSequence text = process(env, text(asset.stream())); rsp.type(asset.type()) .send(text); }
@Override public void handle(final Request req, final Response rsp, final Err ex) throws Throwable { log.error("execution of: {}{} resulted in exception\nRoute:\n{}\n\nStacktrace:", req.method(), req.path(), req.route().print(6), ex); Config conf = req.require(Config.class); boolean stackstrace = Try.apply(() -> conf.getBoolean("err.stacktrace")) .orElse(req.require(Env.class).name().equals("dev")); rsp.send( Results .when(MediaType.html, () -> Results.html(VIEW).put("err", ex.toMap(stackstrace))) .when(MediaType.all, () -> ex.toMap(stackstrace))); }