Ich bin in ein bisschen Binden ... will meinen Kuchen und es auch essen.Jersey ... wie alle Ausnahmen zu protokollieren, aber immer noch ExceptionMappers aufrufen
Ich möchte alle Ausnahmen, die meine Anwendung wirft. Wenn also jemand eine falsche URL antrifft, möchte ich den Stack-Trace auf SLF4J protokollieren.
So sind Sie wahrscheinlich denken: ‚Hey, das ist einfach, nur eine ExceptionMapper implementieren und die Ausnahme log„Also tat ich.
public class RestExceptionMapper implements ExceptionMapper<java.lang.Exception> {
private static final Logger log = LoggerFactory.getLogger(RestExceptionMapper.class);
/**
* {@inheritDoc}
*/
@Override
public Response toResponse(Exception exception) {
log.error("toResponse() caught exception", exception);
return null;
}
}
Wenn Sie dies tun, anstelle von 404-Fehler, wenn jemand Typen ein Falsche URL in, sie bekommen einen Fehler von 500. Man würde vermuten, dass das Zurückgeben von null die Ausnahme in den Kettenhandlern weitergibt, aber Jersey tut das nicht. Es liefert tatsächlich sehr wenig Informationen, warum es einen Handler über einen anderen wählen würde ...
Hat jemand dieses Problem gelöst und wie haben Sie es gelöst?
I CDI Interceptor –
Also, was verwenden würde, ist Ihr Problem: es ist der 404-Fehler Oder ist es, wie die Ausnahme Mapper ausgewählt werden? Oder etwas anderes? –
Nein, das Problem ist, dass die "Lager" Abfangjäger, die mit Jersey versehen sind, nicht cal sind geführt, wenn Sie den obigen Code verwenden. 404 Fehler werden 500 Fehler. –