So versuche ich alle nicht abgefangenen Ausnahmen zu protokollieren, die von den Controllern eines Spring-Projekts generisch zurückgegeben werden. Ich konnte dies mit den folgenden Ausnahme-Handler tun:Spring Exception Handler alle Ausnahmen protokollieren, aber ursprüngliche Antwort zurückgeben
@ControllerAdvice
public class ControllerConfig {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
public static final String DEFAULT_ERROR_VIEW = "error";
@ExceptionHandler(HttpMessageNotReadableException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public void handleBadRequest(HttpMessageNotReadableException e) {
logger.warn("Returning HTTP 400 Bad Request", e);
throw e;
}
@ExceptionHandler(AccessDeniedException.class)
public void defaultErrorHandler(HttpServletRequest request, Exception e) throws Exception {
logger.error("Error in request:" + request.getRequestURL(), e);
throw e;
}
Dies auch die Fehlerreaktionen der Anforderung zurück, so dass ich muß nicht zwischen den verschiedenen Fehlerantwortcodes unterscheiden.
jedoch für jeden Aufruf der Methode ein zweites Fehlerprotokoll wegen der Ausnahme in der Methode ausgelöst erstellt: -Code ist aus org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver # doResolveHandlerMethodException
try {
if (logger.isDebugEnabled()) {
logger.debug("Invoking @ExceptionHandler method: " + exceptionHandlerMethod);
}
exceptionHandlerMethod.invokeAndHandle(webRequest, mavContainer, exception);
}
catch (Exception invocationEx) {
if (logger.isErrorEnabled()) {
logger.error("Failed to invoke @ExceptionHandler method: " + exceptionHandlerMethod, invocationEx);
}
return null;
}
Gibt es eine klügere Möglichkeit, die ursprüngliche Ausnahme der Methode zurückzugeben?