当方法被try和catch块包围时,无法使用@ControllerAdvice和@AfterThrowing。
我可以逐步解释
步骤1:在我的spring应用程序中,所有处理程序(方法)都是通过try and catch块处理异常的。
步骤2:因此,要求我需要在所有处理程序方法中都发生异常时触发电子邮件。但是我的应用程序有100多种方法。因此,尝试使用@ControllerAdvice通过使用@ExceptionHandler批注来处理异常。我知道它不会起作用,因为我们已经在catch代码块中处理了异常。因此,它无法查看@ControllerAdvice。
第3步:我也尝试使用Aop @AfterThrowing建议。它不起作用。因此,我无法删除整个应用程序代码中的所有catch块。做到这一点非常困难。
但是我的问题是
春天,即使我们正在处理异常,也有什么方法可以处理它
我们返回状态码,例如400。在春季,他们会提供有关识别状态码的任何建议。
因为正在将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";
}
}
答案 0 :(得分:0)
您可以使用@Around
通知来捕获方法执行的结果...我的建议是从所有端点中删除try捕获,只需编写包裹 ProceedingJoinPoint <的try捕获< / strong> proceed()
执行。这样,您可以在发生异常时返回 ResponseEntity 400 ,并执行电子邮件发送逻辑。