从零到壹搭建一个商城架构--统一异常处理

在我们项目中为什么要使用编写统一的异常处理类呢?其实就是为类简化我们的一些容易出错的代码,用来监听系统异常,来做统一的处理,这样能很好的结合我们的项目做统一的处理。
比如我们做字段校验的时候,如果每次都要写一次获取字段校验结果的逻辑的话,会比较麻烦,我们编写一个统一处理的异常类,每次碰到校验问题,都会自动的捕获,进行统一处理,而我们不必每次都关心字段校验的问题

1、编写异常处理类

编写异常处理类,在类上使用**@RestControllerAdvice(basePackages = “com.hsl.hslmall.product.controller”)** 来扫描我们指定包下的类

@Slf4j
@RestControllerAdvice(basePackages = "com.hsl.hslmall.product.controller")
public class HslMallExceptionControllerAadvice {
}

2、使用**@ExceptionHandler**标注方法可以处理的异常

@Slf4j
@RestControllerAdvice(basePackages = "com.hsl.hslmall.product.controller")
public class HslMallExceptionControllerAadvice {

    /**
     * 数据校验
     * @param e
     * @return
     */
    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public R handleValidException(MethodArgumentNotValidException e){

        log.error("数据校验出现问题:{},异常类型:{}",e.getMessage(),e.getClass());
        BindingResult bindingResult = e.getBindingResult();
        Map<String,String> map=new HashMap<>();
        bindingResult.getFieldErrors().forEach((item)->{
            map.put(item.getField(),item.getDefaultMessage());
        });
        return R.error(BizCodeEnum.VALID_EXCEPRION.getCode(),BizCodeEnum.VALID_EXCEPRION.getMsg()).put("data",map);
    }

    /**
     * 其他位置异常
     * @param e
     * @return
     */
    @ExceptionHandler(value = Throwable.class)
    public R handleVException(Throwable e){

        log.error("数据校验出现问题:{},异常类型:{}",e.getMessage(),e.getClass());
        return R.error(BizCodeEnum.UNKNOW_EXCEPTION.getCode(),BizCodeEnum.UNKNOW_EXCEPTION.getMsg());
    }
}

上面的类中使用到了一个枚举,这个枚举是用来标识一些业务相关的错误,以及错误信息

比如通用的错误以10开头,01,02,03这样往后排

/**
 * 全局异常枚举类
 */
public enum BizCodeEnum {
    UNKNOW_EXCEPTION(10000,"系统位置异常"),
    VALID_EXCEPRION(10001,"数据校验异常");

    private int code;
    private String msg;

    BizCodeEnum(int code,String msg){
        this.code=code;
        this.msg=msg;
    }

    public int getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }
}

这样我们指定了要处理的包下的异常信息,都会在这里统一处理,我们只关注业务逻辑代码就可以了。

你可能感兴趣的:(项目,从零到壹搭建一个商城架构,统一异常处理,商城)