java - SpringBoot的异步处理如何返回自定义错误页面
问题描述
我对 SpringBoot 中的错误处理有疑问。当使用 @Async 注释的方法中发生异常时,有没有办法显示自定义错误页面?我很高兴知道是否有。
我们目前正在SpringBoot中实现异步处理。以下方法概述了异步处理。我遇到了 Spring 的 SimpleAssyncUncaughtExceptionHandler 而不是自定义 ExceptionHandler 捕获它的问题。
服务类。
@Service
@Slf4j
public class MyService {
...
@Async
public void myAsyncMethod(Intger req) throws MyException {
if (req > 500) {
log.error("request too large." + req);
throw new MyException();
}
...
hogehoge(req);
}
}
异常处理程序类
@ControllerAdvice
public class ExceptionController {
@ExceptionHandler
@RespondeStatus(HttpStatus.FORBIDDEN)
public ModelAndView handleMyException(MyException e) {
log.error(e.getMessage());
return new ModelAndView("4xx.html");
}
}
MyException 类(用于测试)
public class MyException extends Exception {
}
解决方案
事实证明,这可以通过使用 DeferredResult 部分解决。通过从 Handler 类传递一个 DeferdResult 并执行 setErrorResult() 暂时解决了这个问题。
推荐阅读
- c# - 使用带有 Kerberos 令牌的 SAML 2.0 SSO 的 .NET 桌面(非 Web)应用程序
- java - Post Redirect Get 似乎正在工作,但结果 JSP 不显示任何内容
- c++ - 提高 mmap memcpy 文件读取性能
- angular - 使用 Angular 指令添加引导弹出框
- azure-devops - 跨团队管理 Azure Devops (VSTS) PAT
- vue.js - 无法使用 Vue 和 Axios 查询 AWS API
- r - 在 Wikipedia 上复制与高斯分布相关的图
- jquery - 使用 jQuery 更改背景颜色与渐变动画
- string - 两个字符串组合成一个关键字
- python-2.7 - 从 Pandas 数据框中选择特定列