So bekomme ich die folgende Ausnahme, wenn ein Benutzer eine Anfrage auf meiner Web-Anwendung auf einem Tomcat-Anwendungsserver gehostet bricht, mit Abhängigkeitsmanagement behandelt durch Maven:Wie Sie feststellen, ob eine Ausnahme ein ClientAbortException ist
ClientAbortException: java.net.SocketException: Connection reset
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:406)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:480)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:366)
at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:431)
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:419)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:91)
...
I Haben Sie eine Spring @ControllerAdvice
Klasse, die alle Ausnahmen behandelt und eine E-Mail sendet.
@ExceptionHandler(value = Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public ResponseEntity defaultErrorHandler(final HttpServletRequest request, final Principal principal, final Exception e) {
//send email with details of error
return ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
}
aber ich möchte nicht, die E-Mail senden, wenn es diese ClientAbortException
ist.
Ich möchte so etwas wie dies tun:
if (!(e instanceof ClientAbortException)) {
//send email with details of error
}
Aber ClientAbortException
scheint nicht auf meinem Classpath zu sein, da es sich um eine Ausnahme in einem Tomcatbediener-Ebene lib enthalten ist.
Ich könnte überprüfen, ob e instance of SocketException
, aber ich könnte andere SocketException
s vermissen, die mir wichtig sind. Meine nächste Idee war so etwas wie:
e instanceof SocketException && e.getMessage().contains("Connection reset")
Aber es scheint, als ob es eine einfache Möglichkeit, dies zu tun sein sollte.
Irgendwelche Ideen?