springboot项目自定义异常
时间: 2025-01-05 11:36:14 浏览: 9
### 实现自定义异常处理
在 Spring Boot 项目中,为了更好地管理和响应应用程序中的各种异常情况,可以通过创建一个被 `@ControllerAdvice` 注解标记的类来实现全局异常捕获机制[^1]。
此类不仅能够统一管理不同控制器抛出的各种未预期状况,而且支持跨多个控制层共享相同的异常处理器逻辑。下面是一个简单的例子展示如何构建这样的组件:
#### 创建自定义异常类
首先定义一些特定业务场景下的异常类型,以便更精确地区分不同的错误情形并给予相应的反馈信息。
```java
public class ResourceNotFoundException extends RuntimeException {
public ResourceNotFoundException(String message) {
super(message);
}
}
```
#### 构建全局异常处理器
接着编写带有 `@ControllerAdvice` 和 `@ExceptionHandler` 方法注解的 Java 类用于集中处理这些预定义好的异常对象以及其他任何未经预料的情况。
```java
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<?> handleResourceNotFound(ResourceNotFoundException ex){
Map<String, Object> body = new HashMap<>();
body.put("message", "资源不存在:" + ex.getMessage());
return new ResponseEntity<>(body, HttpStatus.NOT_FOUND);
}
@ExceptionHandler(Exception.class)
public ResponseEntity<?> handleError(HttpServletRequest req, Exception ex){
Map<String, Object> body = new LinkedHashMap<>();
body.put("path", req.getServletPath());
body.put("message", ex.getMessage());
return new ResponseEntity<>(body, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
```
上述代码片段展示了两个具体的异常处理函数:一个是专门针对 `ResourceNotFoundException` 这种已知类型的;另一个则是作为兜底措施,适用于所有其他未知类型的异常实例。每当发生对应类型的异常时,Spring 将会调用相应的方法返回给前端用户友好的提示消息以及HTTP状态码[^2]。
此外,如果希望进一步增强默认情况下提供的错误详情页面或JSON响应体的内容,则可以考虑扩展 `DefaultErrorAttributes` 抽象基类来自定义额外的信息字段。
阅读全文