通过@ControllerAdvice统一处理异常,结合自定义异常类与日志记录,实现Java项目中异常的集中管理与标准化响应。

在Java中统一管理异常处理逻辑,核心是通过全局异常处理器、自定义异常类和日志记录相结合的方式,避免重复代码,提升可维护性。重点在于集中捕获和处理异常,而不是在每个方法中单独处理。
在Spring Boot或Spring MVC项目中,@ControllerAdvice 是统一处理控制器层异常的关键注解。它能全局拦截所有Controller抛出的异常,并返回标准化的响应格式。
示例:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(BusinessException.class)
public ResponseEntity<ErrorResponse> handleBusinessException(BusinessException e) {
ErrorResponse error = new ErrorResponse("BUSINESS_ERROR", e.getMessage());
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(error);
}
@ExceptionHandler(NotFoundException.class)
public ResponseEntity<ErrorResponse> handleNotFoundException(NotFoundException e) {
ErrorResponse error = new ErrorResponse("NOT_FOUND", e.getMessage());
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(error);
}
@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponse> handleUnexpectedException(Exception e) {
ErrorResponse error = new ErrorResponse("INTERNAL_ERROR", "系统内部错误");
// 记录详细日志
log.error("未预期异常:", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error);
}
}
这样所有Controller中抛出的异常都会被自动捕获并返回统一结构,前端更容易解析处理。
立即学习“Java免费学习笔记(深入)”;
不要直接抛出Exception或RuntimeException,而是根据业务场景创建有意义的异常类型,比如:
这些异常可以继承RuntimeException,便于在事务中自动回滚,同时携带错误码和提示信息,方便前端展示。
对于需要额外监控的异常(如调用第三方接口失败),可以通过AOP在异常抛出时自动记录上下文信息,比如请求参数、用户ID等,有助于排查问题。
例如,在切面中捕获特定方法的异常并打点日志,而无需在每个方法里写log.error()。
配合全局异常处理,定义一致的返回结构,如:
{
"code": "BUSINESS_ERROR",
"message": "用户名已存在",
"timestamp": "2024-04-05T10:00:00"
}
这样前端可以统一根据code字段做不同处理,降低耦合。
基本上就这些。关键是把异常当成流程的一部分来设计,而不是补丁。合理分层、统一出口,代码会更清晰稳定。
以上就是在Java中如何统一管理异常处理逻辑的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号