【发布时间】:2016-04-07 07:24:25
【问题描述】:
我在 PlayFramework 中实现了自定义页面,就像文档中所说的那样:https://www.playframework.com/documentation/2.4.x/JavaErrorHandling
我在 application.conf 中添加了对 ErrorHandler 的引用
play.http.errorHandler = "com.company.ErrorHandler"
我自己实现了 ErrorHandler:
public class ErrorHandler extends DefaultHttpErrorHandler {
@Inject
public ErrorHandler(Configuration configuration, Environment environment, OptionalSourceMapper sourceMapper, Provider<Router> routes) {
super(configuration, environment, sourceMapper, routes);
}
@Override
public F.Promise<Result> onClientError(Http.RequestHeader requestHeader, int errorCode, String message) {
Logger.debug("Error: onClientError : " + errorCode + ", message: " + message);
return super.onClientError(requestHeader, errorCode, message);
}
@Override
public F.Promise<Result> onServerError(Http.RequestHeader request, Throwable exception) {
Logger.debug("Error: onServerError general");
return F.Promise.pure(redirect(com.company.routes.ErrorController.serverErrorPage()));
}
@Override
protected F.Promise<Result> onBadRequest(Http.RequestHeader request, String message) {
Logger.debug("Error: onBadRequest, message: " + message);
return F.Promise.pure(redirect(com.company.routes.ErrorController.badRequestPage()));
}
@Override
protected F.Promise<Result> onForbidden(Http.RequestHeader request, String message) {
Logger.debug("Error: onForbidden, message: " + message);
return F.Promise.pure(redirect(com.company.routes.ErrorController.forbiddenPage()));
}
@Override
protected F.Promise<Result> onNotFound(Http.RequestHeader request, String message) {
Logger.debug("Error: onNotFound, message: " + message);
return F.Promise.pure(redirect(com.company.routes.ErrorController.notFoundPage()));
}
@Override
protected F.Promise<Result> onOtherClientError(Http.RequestHeader request, int statusCode, String message) {
Logger.debug("Error: onOtherClientError, message: " + message);
return F.Promise.pure(redirect(com.company.routes.ErrorController.errorDefaultPage()));
}
}
当框架本身抛出错误时,自定义页面效果很好。
虽然我在从控制器重定向到错误页面时遇到问题。当我调用端点时:
public Result contact() {
return Results.forbidden("Forbidden");
}
没有显示来自 ErrorHander 的错误页面。我只看到文字“禁止”。
如何在不显式重定向的情况下显示我的自定义错误页面?
【问题讨论】:
标签: java scala playframework playframework-2.4