大家都知道异常细分下来有各式各样的,我们不可能面面俱到,只能把异常做一个归类,以便我们对快速查明异常原因并做出相应的应对;
1.异常归类
1.业务异常:用户行为规范或不规范产生的异常。
2.系统异常:项目运行过程中可预计但无法避免的异常。
3.其他异常:开发人员未预期的异常
2.统一处理
异常统一处理,即自定义异常,封装程序执行过程中出现的问题,便于表现层进行统一的异常拦截并进行处理;
@ControllerAdvice:类上全局异常处理;
@ExceptionHandler(Exception.class):异常处理器,参数为异常类型
GeneralResult:通用返回结果对象
2.1、NormalException类
@Component
@ControllerAdvice//全局异常处理
public class NormalException {
@ExceptionHandler(Exception.class)//异常处理器,参数为异常类型
@ResponseBody
public GeneralResult hanleException(Exception ex){
GeneralResult result=new GeneralResult();
result.setFlag(false);
result.setMsg(ex.getMessage());//异常信息的封装
return result;
}
}
2.2、通用返回结果对象
自定义异常消息返回时需要与业务正常执行的消息按照统一的格式进行处理
public class GeneralResult<T> {
private T data; //封装业务处理结果
private Boolean flag;//执行业务标记,true或false
private String msg; //封装一些提示信息,包括异常信息的封装
private Integer code;//状态码可根据不同异常信息进行编制,创建一个静态的Code类
}
2.3、异常处理器的测试
@Controller
public class HelloController {
@Autowired
private StudentDao studentDao;
@RequestMapping("/hello")
@ResponseBody
public List<Student> hello() {
try {
int i = 1 / 0;
} catch (Exception e) {
throw new RuntimeException("除0异常" + e);
}
return studentDao.findAll();
}
}