关于SSM框架全局异常统一处理的方式

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/qq_39809458/article/details/86521037

       最近在写毕业设计,在开发阶段,遇到bug是常事,为了给了用户良好的体验,我们肯定得处理异常,比如跳转到一个错误页面打印对应的信息,而不是直接出现异常页面或者没有任何反应,所以说统一一个全局的异常处理是很必要的。

对于SSM项目可借鉴的异常处理思路:

系统遇到异常时,在程序中手动抛出,dao抛给serviceservice再抛给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);
    }

}

如上都是提供思路,代码仅供参考,直接复制可能报错哦。

猜你喜欢

转载自blog.csdn.net/qq_39809458/article/details/86521037