gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:48:37 25 4
gpt4 key购买 nike

当方法被 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com