我有一个自定义异常,我抛出了一个未被另一个类捕获的类。
我不知道这是怎么回事:
MailService.java类
@Async
public void sendMail(String to, String subject) throws EmailNotSentException {
throw new EmailNotSentException();
}
MailResource.java类
@RequestMapping(value = "/mails-envoyes",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE)
@Timed
public ResponseEntity<MailEnvoye> createMailEnvoye(@RequestBody MailEnvoye mailEnvoye, HttpServletRequest request) throws URISyntaxException {
try{
mailService.sendMail(to, "subject");
}catch (EmailNotSentException e){
log.debug(e.getLocalizedMessage());
}
}
例外
public class EmailNotSentException extends MessagingException {
public EmailNotSentException() {
super();
}
public EmailNotSentException(String message) {
super(message);
}
public EmailNotSentException(String message, Exception e) {
super(message, e);
}
}
答案 0 :(得分:0)
问题可能是@Async
注释(我假设此代码与Spring一起运行)...正如在锡纸上所说,它异步运行,这意味着它将在不同的线程中运行,因此调用方法将永远不会收到异常。
如果要以代码中的方式处理异常,只需删除@Async
批注。
有几篇文章介绍了如何从异步方法中捕获异常(谷歌是您的朋友),并使该异常可用,以便其他事物可以处理它,但始终是异步的。