@Override public Resp html(Object content) { return contentType(MediaType.HTML_UTF_8).result(content); }
@Override public Resp plain(Object content) { return contentType(MediaType.PLAIN_TEXT_UTF_8).result(content); }
@Override public Resp json(Object content) { return contentType(MediaType.JSON).result(content); }
@Override public Resp binary(Object content) { return contentType(MediaType.BINARY).result(content); }
public static void resultToResponse(Req req, Object result) { if (result instanceof Req) { if (req != result) { req.response().result("Unknown request instance was received as result!"); } } else if (result instanceof Resp) { if (req.response() != result) { req.response().result("Unknown response instance was received as result!"); } } else if (!(result instanceof HttpStatus)) { req.response().result(result); } }
private Object transform(Mapper<Object, Object> transformation, Object resultOrError) throws Exception { U.notNull(transformation, "transformation"); if (HttpWrappers.shouldTransform(resultOrError)) { return transformation.map(resultOrError); } else { Resp resp = req.response(); if (HttpWrappers.shouldTransform(resp.result())) { resp.result(transformation.map(resp.result())); } return resultOrError; } } };
public static byte[] renderMvc(ReqImpl req, Resp resp) { Object result = resp.result(); String content = null; if (shouldRenderView(resp)) { boolean mandatory = (((RespImpl) resp).hasCustomView()); ByteArrayOutputStream out = new ByteArrayOutputStream(); boolean rendered = renderView(req, resp, result, mandatory, out); if (rendered) content = new String(out.toByteArray()); } if (content == null) { Object respResult = U.or(result, ""); content = new String(HttpUtils.responseToBytes(req, respResult, MediaType.HTML_UTF_8, null)); } return renderPage(req, content); }
public static Object resultOf(Req req, Object result) { result = HandlerResultProcessor.INSTANCE.postProcessResult(req, result); HttpUtils.resultToResponse(req, result); return req.response().result(); }
@Override public Object handleError(Req req, Resp resp, Throwable error) { resp.result(null); Customization custom = Customization.of(req); Object result = handleError(req, resp, error, custom); if (result instanceof Throwable) { Throwable errResult = (Throwable) result; return renderError(req, resp, errResult); } else { return result; } }
private static boolean shouldRenderView(Resp resp) { if (!resp.mvc()) return false; Object result = resp.result(); if (result == null) return true; if (((RespImpl) resp).hasCustomView()) return U.notEmpty(resp.view()); return true; }
void writeHttpResp(final MaybeReq req, final Channel ctx, final boolean isKeepAlive, int code, final MediaType contentType, final Object value) { Object result = value; Resp resp = respOrNull(req); if (resp != null) { if (resp.body() != null) { byte[] bytes = Msc.toBytes(resp.body()); writeResponse(req, ctx, isKeepAlive, code, contentType, bytes); return; } else if (resp.result() != null) { result = resp.result(); } } if (contentType == MediaType.JSON) { writeJsonResponse(req, resp, ctx, isKeepAlive, code, contentType, result); } else { byte[] bytes = Msc.toBytes(result); writeResponse(req, ctx, isKeepAlive, code, contentType, bytes); } }
private static void postProcessFile(Resp resp) { File file = resp.file(); if (file != null) { U.must(file.exists()); if (resp.filename() == null) { resp.filename(); } setContentTypeForFile(resp, file); resp.result(Res.from(file).getBytes()); } }
protected Object defaultErrorHandling(Req req, Throwable error) { if (error instanceof NotFound) { Resp resp = req.response().code(404); if (resp.contentType() == MediaType.JSON) { return error; } else { return resp.view("404").result(U.map("req", req)); } } return error; }
private static void postProcessRedirect(Resp resp) { String redirect = resp.redirect(); if (redirect != null) { if (resp.code() < 300 || resp.code() >= 400) { resp.code(303); } resp.headers().put(HttpHeaders.LOCATION.name(), redirect); if (resp.result() == null && resp.body() == null) { resp.body(EMPTY_RESPONSE); } } }
protected Object handleError(Req req, Resp resp, Throwable error, Customization custom) { // if the handler throws error -> process it for (int i = 0; ; i++) { resp.result(null); ErrorHandler handler = custom.findErrorHandlerByType(error); try { Object result = null; if (handler != null) { result = handler.handleError(req, resp, error); } return result != null ? result : defaultErrorHandling(req, error); } catch (Exception e) { if (i >= getMaxReThrowCount(req)) { return U.rte("Too many times an error was re-thrown by the error handler(s)!"); } error = e; } } }
void error(final Req req, final Throwable error, LogLevel logLevel) { try { logError(req, error, logLevel); Resp resp = req.response().code(500).result(null); Object result = Customization.of(req).errorHandler().handleError(req, resp, error); HttpUtils.resultOf(req, result); } catch (Exception e) { Log.error("An error occurred inside the error handler!", e); HttpUtils.resultToResponse(req, HttpUtils.getErrorInfo(req.response(), e)); } }
@Override public Resp html(Object content) { return contentType(MediaType.HTML_UTF_8).result(content); }
private static boolean shouldRenderView(Resp resp) { if (!resp.mvc()) return false; Object result = resp.result(); if (result == null) return true; if (((RespImpl) resp).hasCustomView()) return U.notEmpty(resp.view()); return true; }
protected Object defaultErrorHandling(Req req, Throwable error) { if (error instanceof NotFound) { Resp resp = req.response().code(404); if (resp.contentType() == MediaType.JSON) { return error; } else { return resp.view("404").result(U.map("req", req)); } } return error; }
private static void postProcessRedirect(Resp resp) { String redirect = resp.redirect(); if (redirect != null) { if (resp.code() < 300 || resp.code() >= 400) { resp.code(303); } resp.headers().put(HttpHeaders.LOCATION.name(), redirect); if (resp.result() == null && resp.body() == null) { resp.body(EMPTY_RESPONSE); } } }