版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/qq_39809458/article/details/86521037
最近在写毕业设计,在开发阶段,遇到bug是常事,为了给了用户良好的体验,我们肯定得处理异常,比如跳转到一个错误页面打印对应的信息,而不是直接出现异常页面或者没有任何反应,所以说统一一个全局的异常处理是很必要的。
对于SSM项目可借鉴的异常处理思路:
系统遇到异常时,在程序中手动抛出,dao抛给service,service再抛给Controller,最后Controller抛给前端控制器,前端控制器调用全局异常处理器
如下图:
代码如下:
声明一个全局的异常类(可选可不选)
public class MessageException extends Exception{
private static final long serialVersionUID = 1394818049620775426L;
private String exceptionCode;
private String exceptionMsg;
public MessageException(){}
public MessageException(String exceptionCode, String exceptionMsg) {
super();
this.exceptionCode = exceptionCode;
this.exceptionMsg = exceptionMsg;
}
public String getExceptionCode() {
return exceptionCode;
}
public void setExceptionCode(String exceptionCode) {
this.exceptionCode = exceptionCode;
}
public String getExceptionMsg() {
return exceptionMsg;
}
public void setExceptionMsg(String exceptionMsg) {
this.exceptionMsg = exceptionMsg;
}
@Override
public String toString() {
return "MessageException [exceptionCode=" + exceptionCode + ", exceptionMsg=" + exceptionMsg + "]";
}
}
声明全局异常处理器(返回json数据,因为我的项目是通过json来交互的)
@ExceptionHandler 需要进行异常处理的方法必须与出错的方法在同一个Controller里面。那么当代码加入了 @ControllerAdvice,则不需要必须在同一个 controller 中了。这也是 Spring 3.2 带来的新特性。从名字上可以看出大体意思是控制器增强。 也就是说,@controlleradvice + @ ExceptionHandler 也可以实现全局的异常捕捉。
@ControllerAdvice
public class ApplicationControllerExceptionHandler {
@ExceptionHandler(value = Exception.class)
@ResponseBody
public MessageBean handlerError(HttpServletRequest req, Exception e) {
// MessageBean一个前后台交互的Json实体类,包括success,msg,data属性
return new MessageBean(false, Constants.ERROR_MSG);
}
}
我这里意思就是如果出现异常,统一都返回同样的错误提示给用户,告诉用户,系统碰到了一些预期之外的错误
也许有些小伙伴可能需要区分是系统异常还是自定义异常,然后返回对应的异常的信息,那就参考如下:
@ControllerAdvice
public class ApplicationControllerExceptionHandler {
@ExceptionHandler(value = Exception.class)
@ResponseBody
public MessageBean handlerError(HttpServletRequest req, Exception e) {
// MessageBean一个前后台交互的Json实体类,包括success,msg,data属性
if (e instanceof 自定义异常){
return new MessageBean(false,e.msg());
}
return new MessageBean(false, Constants.ERROR_MSG);
}
}
如上都是提供思路,代码仅供参考,直接复制可能报错哦。