自定义异常未在调用方法中捕获

时间:2019-03-20 08:11:03

标签: java spring exception

我有一个自定义异常,我抛出了一个未被另一个类捕获的类。

我不知道这是怎么回事:

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);
    }
}

1 个答案:

答案 0 :(得分:0)

问题可能是@Async注释(我假设此代码与Spring一起运行)...正如在锡纸上所说,它异步运行,这意味着它将在不同的线程中运行,因此调用方法将永远不会收到异常。

如果要以代码中的方式处理异常,只需删除@Async批注。

有几篇文章介绍了如何从异步方法中捕获异常(谷歌是您的朋友),并使该异常可用,以便其他事物可以处理它,但始终是异步的。