(入门SpringBoot)SpringBoot配置全局异常(五)
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,"系统错误,请联系程序员");
}
}
}
- 因为原来的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;
}
}
- 因为现在的项目有一些会返回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;
}
}