这里有一个非常相似的问题,但答案不足以解决我的问题。
我在一个@Service
类中有这个方法:
@Async
public void activateUser(...){
if(someCondition){
throw new GeneralSecurityException();
}
}
控制器:
@GetMapping( "/activate")
public ResponseEntity<Void> activate(...){
myService.activateUser(...);
}
控制器建议:
@RestControllerAdvice( basePackages = "com.app.security" )
public class SecurityAdviceController extends ResponseEntityExceptionHandler {
@ExceptionHandler( GeneralSecurityException.class )
public ResponseEntity<GeneralSecurityExceptionBody> handleGeneralSecurityException( GeneralSecurityException ex ) {
return ResponseEntity
.status( HttpStatus.MOVED_PERMANENTLY )
.header( HttpHeaders.LOCATION, ex.getUrl() )
.body( null );
}
我们到了。由于异常将在另一个线程中引发,我该如何继续使其可用于@RestControllerAdvice
?
许多人建议实施AsyncUncaughtExceptionHandler,我同意,但这并不能回答问题。
当我删除@Async
时,一切都很好,我可以看到同一个线程执行所有任务,但@Async
我有 2 个线程参与。
一种解决方案是让父线程抛出异常(但这太麻烦了,我不知道如何实现)。
谢谢你的帮助。