Ich habe einen Weg gefunden, Client-Fehler direkt anzurufen, indem es in das gewünschte Element injiziert wird. Ich landete mit Lösung nach (Play-Framework-2.5):
public class ErrorHandler extends DefaultHttpErrorHandler {
private ErrorController errorController;
@Inject
public ErrorHandler(Configuration configuration,
Environment environment,
OptionalSourceMapper sourceMapper,
Provider<Router> routes,
ErrorController errorController) {
super(configuration, environment, sourceMapper, routes);
this.errorController = errorController;
}
@Override
public CompletionStage<Result> onServerError(Http.RequestHeader request, Throwable exception) {
Logger.debug("Error: onServerError general");
return CompletableFuture.completedFuture(this.errorController.serverErrorPage());
}
@Override
protected CompletionStage<Result> onBadRequest(Http.RequestHeader request, String message) {
Logger.debug("Error: onBadRequest, message: " + message);
return CompletableFuture.completedFuture(this.errorController.badRequestPage());
}
@Override
protected CompletionStage<Result> onForbidden(Http.RequestHeader request, String message) {
Logger.debug("Error: onForbidden, message: " + message);
return CompletableFuture.completedFuture(this.errorController.forbiddenPage());
}
@Override
protected CompletionStage<Result> onNotFound(Http.RequestHeader request, String message) {
Logger.debug("Error: onNotFound, message: " + message);
return CompletableFuture.completedFuture(this.errorController.notFoundPage());
}
@Override
protected CompletionStage<Result> onOtherClientError(Http.RequestHeader request, int statusCode, String message) {
Logger.debug("Error: onOtherClientError, message: " + message);
return CompletableFuture.completedFuture(this.errorController.errorDefaultPage());
}
}
Dann kann ich es nennen mag:
class SomeElement {
private final DefaultHttpErrorHandler errorHandler;
@Inject
public SomeElement(DefaultHttpErrorHandler errorHandler) {
this.errorHandler = errorHandler;
}
public CompletionStage<Result> onAuthFailure(final Http.Context context,
final Optional<String> content) {
return this.errorHandler.onClientError(context.request(), Http.Status.FORBIDDEN, "You don't have required permissions.");
}
}
, dass ein guter Punkt. Wenn Sie jedoch die zugrunde liegende Implementierung von DefaultHttpErrorHandler überprüfen, werden Sie feststellen, dass Aufrufe in onClientError bereits an andere Methoden wie z. onBadRequest, onForbidden. Mein Problem ist, dass trotz der Rückkehr Ergebnisse. verboten(). Die Anfrage wird nicht vom benutzerdefinierten ErrorHandler abgefangen. –
Sie scheinen richtig zu sein. Vielleicht funktioniert es in Play 2.5 - sie haben sich in DefaultHttpErrorHandler im Vergleich zu 2.4 sehr verändert. – Kris