springmvc 处理异常的解决方案
关于异常的分类
业务异常:·
规范的用户行为产生的异常·
不规范的用户行为操作产生的异常
系统异常:
1项目运行过程中可预计且无法避免的异常
◆其他异常:·
编程人员未预期到的异常
异常处理方案
- 业务异常:
发送对应消息传递给用户,提醒规范操作 - 系统异常:
发送固定消息传递给用户,安抚用户
发送特定消息给运维人员,提醒维护
记录日志 - 其他异常:
发送固定消息传递给用户,安抚用户
发送特定消息给编程人员,提醒维护
纳入预期范围内
记录日志
异常的处理
将出现的错误,传换成异常,给客户端看的是提示信息,具体的异常是给程序员看的。
解决异常处理方案-自定义异常
定义用户行为异常,又叫做业务异常
//自定义异常继承RuntimeException,覆盖父类所有的构造方法
public class BusinessException extends RuntimeException {
public BusinessException() {
}
public BusinessException(String message) {
super(message);
}
public BusinessException(String message, Throwable cause) {
super(message, cause);
}
public BusinessException(Throwable cause) {
super(cause);
}
public BusinessException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
定义系统异常
//自定义异常继承RuntimeException,覆盖父类所有的构造方法
public class SystemException extends RuntimeException {
public SystemException() {
}
public SystemException(String message) {
super(message);
}
public SystemException(String message, Throwable cause) {
super(message, cause);
}
public SystemException(Throwable cause) {
super(cause);
}
public SystemException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
自定义异常对项目中的异常处理
@Component
@ControllerAdvice
public class ProjectExceptionAdvice {
@ExceptionHandler(BusinessException.class)
public String doBusinessException(Exception ex, Model m){
//使用参数Model将要保存的数据传递到页面上,功能等同于ModelAndView
//业务异常出现的消息要发送给用户查看
m.addAttribute("msg",ex.getMessage());
return "error.jsp";
}
@ExceptionHandler(SystemException.class)
public String doSystemException(Exception ex, Model m){
//系统异常出现的消息不要发送给用户查看,发送统一的信息给用户看
m.addAttribute("msg","服务器出现问题,请联系管理员!");
//实际的问题现象应该传递给redis服务器,运维人员通过后台系统查看
//实际的问题显现更应该传递给redis服务器,运维人员通过后台系统查看
return "error.jsp";
}
@ExceptionHandler(Exception.class)
public String doException(Exception ex, Model m){
m.addAttribute("msg",ex.getMessage());
//将ex对象保存起来
return "error.jsp";
}
}