gpt4 book ai didi

java - 如何在 Spring MVC 中捕获所有未处理的异常(即没有现有的@ExceptionHandler)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:12:10 25 4
gpt4 key购买 nike

我想让 HandlerExceptionResolver 解决我没有通过 @ExceptionHandler 注释明确捕获的任何异常。

无论如何,我想对这些异常应用特定的逻辑。例如,另外发送邮件通知或日志。我可以通过添加一个 @ExceptionHandler(Exception.class) catch 来实现这一点,如下所示:

@RestControllerAdvice
public MyExceptionHandler {
@ExceptionHandler(IOException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public Object io(HttpServletRequest req, Exception e) {
return ...
}


@ExceptionHandler(Exception.class)
public Object exception(HttpServletRequest req, Exception e) {
MailService.send();
Logger.logInSpecificWay();

//TODO how to continue in the "normal" spring way with HandlerExceptionResolver?
}
}

问题:如果我像这样添加 @ExceptionHandler(Exception.class),我可以捕获那些未处理的异常。

但是 我不能让 spring 继续使用 HandlerExceptionResolver 的正常工作流来创建响应 ModelAndView 并设置一个自动 HTTP 状态代码。

例如,如果有人在 GET 方法上尝试 POST,默认情况下 spring 将返回 405 Method not allowed。但是使用 @ExceptionHandler(Exception.class) 我会吞下这个标准的 spring 处理...

那么我怎样才能保留默认的 HandlerExceptionResolver,但仍然应用我的自定义逻辑?

最佳答案

提供完整的解决方案:它仅通过扩展 ResponseEntityExceptionHandler 来工作,因为它处理所有 spring-mvc 错误。然后可以使用 @ExceptionHandler(Exception.class) 捕获未处理的那些。

@RestControllerAdvice
public class MyExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<Object> exception(Exception ex) {
MailService.send();
Logger.logInSpecificWay();
return ... custom exception
}
}

关于java - 如何在 Spring MVC 中捕获所有未处理的异常(即没有现有的@ExceptionHandler)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48991353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com