spring boot 教你全局异常的处理

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());
    }

}

之后再项目中就返回这个一样,一般一个异常类就够了,如果很复杂可以扩展

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章