首页 > 解决方案 > 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 {
}

标签: javaspring

解决方案


事实证明,这可以通过使用 DeferredResult 部分解决。通过从 Handler 类传递一个 DeferdResult 并执行 setErrorResult() 暂时解决了这个问题。


推荐阅读