异常统一处理的优势
提高代码可维护性
通过集中管理异常处理逻辑,避免重复代码,减少因异常处理分散导致的维护困难。统一处理机制使修改和扩展异常处理策略更加便捷。
增强系统健壮性
统一捕获未处理的异常,防止程序意外终止。通过预设的降级策略(如默认返回值、日志记录、友好提示),确保系统在异常情况下仍能提供基本服务。
提升用户体验
自定义异常信息格式,返回用户友好的错误提示(如标准化JSON响应)。避免暴露敏感技术细节,同时提供可追溯的错误码或请求ID便于问题定位。
简化开发流程
开发者无需在每个方法中单独处理异常,只需关注业务逻辑。通过AOP或全局拦截器实现非侵入式处理,降低业务代码与异常处理的耦合度。
便于监控与分析
集中记录异常日志,结合监控工具实时发现系统问题。统一存储异常上下文信息(如参数、堆栈),加速故障排查和性能优化。
规范团队协作
制定统一的异常分类体系(如业务异常、系统异常),明确处理优先级。通过标准化接口文档描述可能的异常类型,提升团队协作效率。
实现的思路:将异常进行统一捕获管理,就不用在Controller层进行显示处理,
代码实现:
java
@ControllerAdvice
public class GlobalExceptionHandler {
/**
* 自定义方法,处理所有controller中出现的异常
*/
@ExceptionHandler(Exception.class)
@ResponseBody
public ResultObj globalHanderlException(Exception exception) {//精准捕获异常,将信息返回给前端
//处理异常逻辑】
System.out.println("----------执行全局异常方法--------------");
//打印异常堆栈信息
exception.printStackTrace();
return ResultObj.error();
}
}
controller层
java
@Controller
public class ExceptionController {
/**
* 查询数据
*/
@RequestMapping("queryData")
@ResponseBody
public ResultObj queryData(@RequestParam String type){
if(type.equals("宝马")){
return ResultObj.ok("宝马");
}else {
return ResultObj.error();
}
}
/**
* 查询数据
*/
@RequestMapping("queryAll")
@ResponseBody
public ResultObj queryAll(){
//把可能出现异常代码方法try块
// int i = 10 / 0; //算术异常
//抛出空指针异常
String str = null;
str.isEmpty();
return ResultObj.ok();
}
}
测试
运行启动类,直接访问接口,产看打印后台信息