spring boot 全局异常处理
处理全局异常需要分为三步来做
- 自定义异常枚举
- 自定义异常
- spring boot AOP异常处理
下面我写的比较简单,希望结合根据自己情况处理,这里就简单的写一些代码思想
1 自定义一样枚举
public enum WebExceptionEnum {
/**
* SYS_ERROR 系统文件错误
* UNKNOWN_ERROR 未知系统错误
* SERVICE_INVOKE_ERROR 服务器调用错误
* ILLEGAL_ARGS 传入参数不正确
*/
SYS_ERROR("SYS_ERROR", "系统错误请重试"),
UNKNOWN_ERROR("UNKNOWN_ERROR", "未知系统错误"),
SERVICE_INVOKE_ERROR("SERVICE_INVOKE_ERROR", "服务器调用错误"),
ILLEGAL_ARGS("ILLEGAL_ARGS", "参数效验失败");
private String exception;
private String massage;
WebExceptionEnum(String exception, String massage) {
this.exception = exception;
this.massage = massage;
}
public String getException() {
return exception;
}
public String getMassage() {
return massage;
}
public static WebExceptionEnum getWebException(String exception) {
for (WebExceptionEnum results : WebExceptionEnum.values()) {
if (results.getException().equals(exception)) {
return results;
}
}
return null;
}
}
2 自定义异常
public class MessageCenterException extends RuntimeException{
private static final long serialVersionUID = -8581672033133636908L;
//异常状态枚举类型
private WebExceptionEnum exceptionEnum;
//set方法
private void setExceptionEnum(WebExceptionEnum exceptionEnum){
this.exceptionEnum = exceptionEnum;
}
//无参构造方法
public WebExceptionEnum getExceptionEnum(){
return exceptionEnum;
}
//获取枚举异常信息
public MessageCenterException(WebExceptionEnum exceptionEnum){
super(exceptionEnum.getMassage());
this.setExceptionEnum(exceptionEnum);
}
//获取异常信息
@Override
public String getMessage() {
return exceptionEnum.getMassage();
}
}
3 全局异常处理
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
// 全局的错误的异常处理
//
/**
* oracle 存储过程 维护
* 数据库层异常
* 业务层的异常
*/
// value处理那个异常
@ExceptionHandler(MessageCenterException.class)
public Result baseException(HttpServletRequest request, MessageCenterException ex) {
log.error(ex.getMessage());
return ErrorResult.error(ex.getMessage());
}
}
之后再项目中就返回这个一样,一般一个异常类就够了,如果很复杂可以扩展