Spring Boot Endpoints 中的异常处理

Posted

技术标签:

【中文标题】Spring Boot Endpoints 中的异常处理【英文标题】:Exception handling in Spring Boot Endpoints 【发布时间】:2017-09-14 21:47:22 【问题描述】:

我正在尝试处理具有 SOAP 端点和 Rest 控制器的 Spring Boot 应用程序中的异常。

捕获发生在 REST 控制器中的异常非常简单,我只是使用 @controlleradvice 设置了一个具有 @exceptionhandler 方法的类,并且所有异常都会被捕获。但是,这个 controlleradvice 似乎没有捕获 SOAP 端点中发生的异常。有没有办法捕获@controlleradvice 类的端点中抛出的异常?如果没有,是否有其他方法可以在整个应用程序中集中处理异常,独立于抛出异常的位置?

非常感谢您。

【问题讨论】:

你需要发布代码,但一般来说,这通常是由于异常不是从 bean 内部抛出的,所以它不在 Spring 世界中。 能否请您发布代码以便我们分析问题...如果您想捕获所有异常然后在 ExceptionHandler @ExceptionHandler(Throwable.class) 中捕获可抛出但一般情况下这不是建议您也可以在@ExceptionHandler 中指定要捕获的异常数组,所以我认为您要捕获的异常不是您在 ExceptionHandler 中定义的类的一部分...如果您发布,我们可以轻松地对其进行排序代码... 我需要在我的应用程序中有一些地方可以捕获代码中任何地方可能引发的任何异常。我的应用程序有 REST 和 SOAP 入口点。我发现 ControllerAdvice 是捕获控制器中抛出的异常的好方法。但是这个 ControllerAdvice 只捕获 REST 控制器入口点中抛出的异常,不会捕获 SOAP 端点上抛出的异常。我认为这是因为 ControllerAdvice 侦听 Controller 类,而 Endpoint 不是 Controller。有没有办法在我的 ControllerAdvice 类中捕获 SOAP 端点中抛出的异常? 就像你提到的,@ControllerAdvice@RestController 配合得很好。我使用@Aspect@Endpoint SOAP 控制器上获得相同的效果。 【参考方案1】:

我们可以创建自定义异常:

@ResponseStatus(HttpStatus.NOT_FOUND) public class StudentNotFoundException extends 
RuntimeException 

Spring 中的异常处理程序:

@ControllerAdvice
@RestController
public class CustomizedResponseEntityExceptionHandler extends 
ResponseEntityExceptionHandler 
@ExceptionHandler(StudentNotFoundException.class)
 public final ResponseEntity<ErrorDetails> 
 handleUserNotFoundException(StudentNotFoundException ex, WebRequest request) 
  ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage(),
  request.getDescription(false));
 return new ResponseEntity<>(errorDetails, HttpStatus.NOT_FOUND);



public class ErrorDetails 
private Date timestamp;
private String message;
private String details;

public ErrorDetails(Date timestamp, String message, String details) 
  super();
 this.timestamp = timestamp;
  this.message = message;
  this.details = details;
 

【讨论】:

以上是关于Spring Boot Endpoints 中的异常处理的主要内容,如果未能解决你的问题,请参考以下文章

如何启用Spring Boot Actuator的所有Endpoints

如何启用Spring Boot Actuator的所有Endpoints

如何启用Spring Boot Actuator的所有Endpoints

Spring Boot Actuator Endpoints 安全性不适用于自定义 Spring Security 配置

Spring Boot (27) actuator服务监控与管理

从 Spring Boot 项目部署战争