spring boot全局异常处理
全局异常处理
public class GlobalException extends RuntimeException {
private static final long serialVersionUID = 1 L;
private CodeMsg cm;
public GlobalException ( CodeMsg cm) {
super ( cm. toString ( ) ) ;
this . cm = cm;
}
public CodeMsg getCm ( ) {
return cm;
}
}
拦截异常类
@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {
@ExceptionHandler ( value= Exception. class )
public Result< String> exceptionHandler ( HttpServletRequest request, Exception e) {
e. printStackTrace ( ) ;
if ( e instanceof GlobalException ) {
GlobalException ex = ( GlobalException) e;
return Result. error ( ex. getCm ( ) ) ;
} else if ( e instanceof BindException ) {
BindException ex = ( BindException) e;
List< ObjectError> errors = ex. getAllErrors ( ) ;
ObjectError error = errors. get ( 0 ) ;
String msg = error. getDefaultMessage ( ) ;
return Result. error ( CodeMsg. BIND_ERROR. fillArgs ( msg) ) ;
} else {
return Result. error ( CodeMsg. SERVER_ERROR) ;
}
}
}
异常信息类
public class CodeMsg {
private int code;
private String msg;
public static CodeMsg SUCCESS = new CodeMsg ( 0 , "success" ) ;
public static CodeMsg SERVER_ERROR = new CodeMsg ( 500100 , "服务端异常" ) ;
public static CodeMsg BIND_ERROR = new CodeMsg ( 500101 , "参数校验异常:%s" ) ;
public static CodeMsg SESSION_ERROR = new CodeMsg ( 500210 , "Session不存在或者已经失效" ) ;
public static CodeMsg PASSWORD_EMPTY = new CodeMsg ( 500211 , "登录密码不能为空" ) ;
public static CodeMsg MOBILE_EMPTY = new CodeMsg ( 500212 , "手机号不能为空" ) ;
public static CodeMsg MOBILE_ERROR = new CodeMsg ( 500213 , "手机号格式错误" ) ;
public static CodeMsg MOBILE_NOT_EXIST = new CodeMsg ( 500214 , "手机号不存在" ) ;
public static CodeMsg PASSWORD_ERROR = new CodeMsg ( 500215 , "密码错误" ) ;
private CodeMsg ( ) {
}
private CodeMsg ( int code, String msg ) {
this . code = code;
this . msg = msg;
}
public int getCode ( ) {
return code;
}
public void setCode ( int code) {
this . code = code;
}
public String getMsg ( ) {
return msg;
}
public void setMsg ( String msg) {
this . msg = msg;
}
public CodeMsg fillArgs ( Object. . . args) {
int code = this . code;
String message = String. format ( this . msg, args) ;
return new CodeMsg ( code, message) ;
}
@Override
public String toString ( ) {
return "CodeMsg [code=" + code + ", msg=" + msg + "]" ;
}
}