欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

(入门SpringBoot)SpringBoot配置全局异常(五)

程序员文章站 2022-05-10 13:02:19
Spring的全局异常,用于捕获程序员没有捕获的异常。具体请看下面代码: 1.ControllerAdvice拦截异常,统一处理.通过Spring的AOP来管理. @ControllerAdvicepublic class ExceptionHandle { /** * 要捕获什么异常: * @re ......

spring的全局异常,用于捕获程序员没有捕获的异常。具体请看下面代码:

1.controlleradvice拦截异常,统一处理.通过spring的aop来管理.

@controlleradvice
public class exceptionhandle {

    /**
     * 要捕获什么异常:
     * @return 返回result:
     */
    @exceptionhandler(value = exception.class)
    @responsebody
    public result handle(exception e){
        e.printstacktrace();
        if(e instanceof myexception){
            myexception myexception = (myexception)e;
            return resultutil.error(myexception.getcode(),myexception.getmessage());
        }else{
            return resultutil.error(-1,"系统错误,请联系程序员");
        }
    }


}

  1. 因为原来的exception只可以传msg,那么我们就可以自定义自己的异常,可以传code:


/**
 * 自定义异常类,因为exception抛出只可以传消息,太不方便了.
 *        提示:runtimeexception, 源码:runtimeexception extends exception
 *            并且spring框架对runtimeexception才会回滚.exception不会回滚.
 * create by xxx

 * 2019-05-26
 */
public class myexception extends runtimeexception {

    private integer code;

    public myexception(resultenum resultenum){
        super(resultenum.getmsg());//父类可以穿个msg,service层可以抛出myexception.
        this.code = resultenum.getcode();
    }

    public integer getcode() {
        return code;
    }

    public void setcode(integer code) {
        this.code = code;
    }
}

  1. 因为现在的项目有一些会返回code信息,但是随手定义一个不好维护,我们可以定义成枚举类型,对这些code,msg进行统一管理.

/**
 * created by : xxx

 * 2019-05-27
 */
public enum  resultenum {
    unco_error(-1,"未知错误"),
    success(0,"成功")
    ;
    /**
     * 编码:
     */
    private integer code;
    /**
     * 消息:
     */
    private string msg;

    resultenum(integer code,string msg){
        this.code = code;
        this.msg = msg;
    }

    public integer getcode() {
        return code;
    }

    public string getmsg() {
        return msg;
    }
}