SpringBoot添加全局异常处理

问题描述

有的时候同一个异常处理要多次使用,这个时候添加全局异常处理来简化开发流程

这里是以用户名重复保存报的sql异常为例


解决方案:

在全局包中创建一个类作为全局异常处理类,这里全局包为common

代码如下

@ControllerAdvice(annotations = {RestController.class, Controller.class})//拦截Controller
@ResponseBody//方便分装成json数据返回
@Slf4j//日志
public class GlobalExeptionHandler {
    /**
     * 进行异常处理,一旦发生这种异常,会跳转到这里进行通用处理!
     * 这里处理的是用户id一样的异常,id不能一样的,在sql数据库中设置了
     * @return
     */
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)//处理的异常!
    public R exceptionHandler(SQLIntegrityConstraintViolationException ex){
        log.error(ex.getMessage());//异常信息,日志通过日志看到后面的异常中需要的异常重复账号的字段
        //如果这sql异常信息有Duplicate entry字段,就进一步说明是账号重复的异常
        if(ex.getMessage().contains("Duplicate entry")){
            String[] split = ex.getMessage().split(" ");//这个异常信息里面有重复的账号,拿到它!
            String msg = split[2] + "已存在";//进行拼接
            return R.error(msg);//进行返回
        }
        return R.error("未知错误");
    }
}

注意:这里是结合前端vue书写的,返回通用类型是R,新技能操作异常报错的信息,得到自己想要的东西,这里是获取了重复的账号

你可能感兴趣的:(Springboot的项目经验,spring,boot,java,spring)