java - 即使我们在 catch block 中处理异常,如何在 spring 中使用 @ControllerAdvice 处理异常

标签 java spring

当方法被 try 和 catch block 包围时,无法使用 @ControllerAdvice 和 @AfterThrowing。

我可以一步一步解释

第 1 步:在我的 Spring 应用程序中,所有处理程序(方法)都是通过 try 和 catch block 处理异常。

第2步:所以要求我需要在所有处理程序方法中发生异常时触发电子邮件。但我的应用程序有数百个方法。因此,尝试使用@ControllerAdvice通过使用@ExceptionHandler注释来处理异常。我知道它不会起作用,因为我们已经在 catch block 中处理了异常。所以它不能看@ControllerAdvice。

第 3 步: 我也尝试使用 Aop @AfterThrowing 建议。它不起作用。所以我无法删除整个应用程序代码中的所有 catch block 。做到这一点是非常困难的。

但我的问题是 即使我们正在处理异常,Spring 有没有办法处理它。 我们返回状态代码,例如 400 。在 Spring 中,他们有任何建议来识别状态代码。
因为正在将 ResponseEntity Status 作为响应退休。

@RequestMapping(value = "/service/getDetails", method = RequestMethod.POST, produces = { "application/json" })
public ResponseEntity<Map<String, Object>> getDetails(@RequestBody Details details, HttpServletRequest request) {
    ResponseEntity<Map<String, Object>> response = null;
    try {
        /// Some code
    } catch (Exception e) {
        logger.error("Exception while DetailsController: " + e.getMessage());
        response = new ResponseEntity<>(HttpStatus.BAD_REQUEST);
        /*
         * int status=response.getStatusCodeValue();
         * scheduledMailTrigerService.sendErrorLogInfo(request,e,status);
         */
    }
    return response;
}

  @ControllerAdvice
  public class AppExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(value = { Exception.class })
public String handleAnyException(Exception ex, WebRequest request) {
    System.out.println("Done");
    return "Done";
}

}

最佳答案

您可以使用 @Around 建议来捕获方法执行的结果...我的建议是您从所有端点中删除 try catch,只需编写一个包含 < strong>ProceedingJoinPoint proceed() 执行。这样,您可以在发生异常时返回 ResponseEntity 400,同时执行电子邮件发送逻辑。

关于java - 即使我们在 catch block 中处理异常,如何在 spring 中使用 @ControllerAdvice 处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57125264/

相关文章:

JAVA JSON保存文件

java - 同时运行多个 JDK

java - 根据Spring的bean定义bean

java - Spring(适用于 Android)和 Jackson2 : PUT as application/x-www-form-urlencoded

java - 通过在 Java DatagramSocket 中禁用 SO_RCVBUF 来读取最新的 UDP 数据包?

java - 对象的原始成员是在堆上还是在栈上?

java - 将文件路径字符串从 jsp 传递到 java servlet

java - 如何在机器上的docker守护程序和Jenkins之间建立连接以执行docker命令?

java - 在 Spring Security 中创建自定义 PostAuthorize 方法

java - 使用 JobStoreTX 为 quartz 集群配置 CronTriggerFactoryBean