springboot——全局异常处理器及封装结果集

目录

一、全局异常处理器

1.1 程序

1.2 @ControllerAdvice 注解

二、封装结果集


一、全局异常处理器

1.1 程序

/**
 * 全局异常处理
 * 底层是通过代理,代理controller,通过AOP把我们的一些方法拦截到,如果有异常,就在这个类统一进行处理
 * 下面就是只要带有RestController.class, Controller.class,Service.class的注解的类或方法出现异常,我们都会进行统一处理
 */
@ControllerAdvice(annotations = {RestController.class, Controller.class, Service.class})  // 通知
@ResponseBody  //我们需要返回JSON数据
@Slf4j
public class GlobalExceptionHandler {

//  表示处理SQL异常
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex) {
//      打印日志信息
        log.error(ex.getMessage());//Duplicate entry 'zhangjingqi' for key 'employee.idx_username'

//      在这里也可以判断异常的具体信息,比如:
        if(ex.getMessage().contains("Duplicate entry")){
            String[] s = ex.getMessage().split(" ");
            String username = s[2];
            String msg =s[2]+"已经存在";
           return   R.error(msg);
        }
//      其他情况下可以直接输出
        return R.error("未知错误:"+ex.getMessage());
    }
}

1.2 @ControllerAdvice 注解

称为Controller增强器,给Controller控制器添加统一的操作或处理。

      我是在下面的这篇文章中学习的

https://www.cnblogs.com/lenve/p/10748453.htmlicon-default.png?t=N2N8https://www.cnblogs.com/lenve/p/10748453.html

二、封装结果集

对于code编码自己可以随便定义,下面只是一个例子

/**
 * 通用返回结果类,服务端响应的数据都会封装成此对象
 * @param <T>  这个类会接受多种类型,可能是普通对象,可能是数组、集合等等等等,所以我们要将这个加个泛型<T>,表示可以接收任何参数
 */
//  为什么不用Object,而用<T>?  如果用object需要强转类型 而T不用
@Data
public class R<T> {

    private Integer code; //编码:1成功,0和其它数字为失败

    private String msg; //错误信息

    private T data; //数据

    private Map map = new HashMap(); //动态数据

//  方法的返回值及参数中的T属于泛型
    public static <T> R<T> success(T object) {
        R<T> r = new R<T>();
        r.data = object;
        r.code = 1;   //成功
        return r;
    }

    public static <T> R<T> error(String msg) {
        R r = new R();
        r.msg = msg;
        r.code = 0;   //失败
        return r;
    }

    public R<T> add(String key, Object value) {
        this.map.put(key, value);
        return this;
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_51351637/article/details/130040230