当前位置: 首页 > news >正文

Springboot全局异常捕获

使用@ControllerAdvice@ExceptionHandler

这是Spring提供的一种非常方便的方式来处理控制器层抛出的异常。你可以创建一个带有@ControllerAdvice注解的类,并在其中定义@ExceptionHandler方法来捕获和处理特定的异常。

@ControllerAdvice
public class GlobalExceptionHandler {
 
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ResponseEntity<Object> handleException(Exception e) {
// 日志记录
e.printStackTrace();
// 返回错误信息
return new ResponseEntity<>("An error occurred", HttpStatus.INTERNAL_SERVER_ERROR);
}
}

 使用@RestControllerAdvice

如果你的全局异常处理器需要返回JSON格式的响应,可以使用@RestControllerAdvice注解,这样返回的对象会自动被Spring序列化为JSON。

@RestControllerAdvice
public class GlobalExceptionHandler {
 
@ExceptionHandler(value = Exception.class)
public ResponseEntity<Object> handleException(Exception e) {
// 日志记录
e.printStackTrace();
// 返回错误信息
return new ResponseEntity<>("An error occurred", HttpStatus.INTERNAL_SERVER_ERROR);
}
}

使用ResponseEntityExceptionHandler

如果你希望捕获的是REST控制器抛出的异常,而不是Spring MVC控制器抛出的异常,你可以通过继承ResponseEntityExceptionHandler类来创建一个自定义的异常处理器。这种方法更适合处理REST API中的异常。

 

@RestControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
 
@ExceptionHandler(value = Exception.class)
protected ResponseEntity<Object> handleConflict(Exception ex) {
// 日志记录
ex.printStackTrace();
// 返回错误信息
return new ResponseEntity<>("An error occurred", HttpStatus.INTERNAL_SERVER_ERROR);
}
}
 

使用@ExceptionHandler在具体控制器中处理异常

虽然这种方法不是全局的,但它可以在单个控制器或一组控制器中捕获和处理异常。这对于特定场景下的异常处理很有用。例如:

@RestControllerAdvice(basePackages = "com.example") // 指定包路径,可选
public class SpecificExceptionHandler {
@ExceptionHandler(value = MethodArgumentNotValidException.class) // 捕获特定异常类型,例如参数验证失败异常
public ResponseEntity<Object> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
// 日志记录或返回错误信息等处理逻辑...
return new ResponseEntity<>("Validation failed", HttpStatus.BAD_REQUEST); // 返回400 Bad Request状态码和错误信息。
}
}
http://www.vanclimg.com/news/1803.html

相关文章:

  • CF 复健记录
  • [Unity] 良好手感的人物移动速率计算
  • 比特彗星常见问题-用户列表显示问题
  • 「补档」 像素帝的比特彗星教程
  • 《春王正月》
  • 数学积累(强基2 例65~82)
  • 新蛋白标注流程
  • 比特彗星常见问题-设置视频预览播放器
  • 开发AppleScript时查看程序UI元素的工具
  • Hyperlane框架的高级特性深度解析:从零拷贝到宏系统的完美融合(7601)
  • 实战项目:文件分块上传系统(2069)
  • Web服务器性能大比拼:谁才是真正的速度之王(0106)
  • Hyperlane性能调优秘籍:从毫秒级响应到百万QPS的优化之路(5333)
  • TCP连接优化的实战经验(0513)
  • 计算几何
  • JAVA语言学习总结(第28天)
  • GTMKubeJS轮子和技巧分享
  • OI集训 Day13
  • 格式化字符串
  • Java学习Day29
  • 待办
  • 20250729 沪锡
  • 内核模块支持
  • 最大公约数最小公倍数与周期
  • LLM的参数量是什么意思
  • 平衡树Splay - AC
  • 7.15-7.28软路由搭建
  • 2025.7.29
  • 电脑接入麦克风设置
  • Windows平台Microsoft Edge关闭指定快捷键方法