简单的全局异常处理

前言        

        之前读大学的时候,在学校写项目比较喜欢用到try-catch去捕获异常,面试的时候面试官问我是怎么处理异常的,我还是比较直白的说出只是简单采用try-catch去实现。 但是之后有时候写Controller层的时候如果一个个抛会比较麻烦,现在在学习到异常处理的,为了让代码更容易维护,我创建一个类集中处理异常,上网查了下发现可以用  @RestControllerAdvice + @ExceptionHandler 两个注解去实现简单的全局异常捕获。

一、首先还是先来点理论性的东西

@RestControllerAdvice是用于全局代码异常捕获,异常集中处理,更好的使业务逻辑与异常处理剥离开,与ControllerAdvice区别在于返回的数据是JSON字符串,同时跟RestController不太一样。

@ExceptionHandler是统一处理某一类异常,从而能够减少代码重复率和复杂度,value值表示要捕捉的异常,可以写多个,然后根据异常,就可以在这个方法里面进行处理。

1. 这是整个异常类处理的代码,里面返回的Result实体是我自己定义的实体类

StatusCode.ERROR 也是自己定义的一个字符串,其实就是状态码,可自行定义。

BaseExceptionHandler.java

/**
 * 统一异常处理
 * Created by yhj on 2019/1/24.
 */
@RestControllerAdvice
public class BaseExceptionHandler {

    /**
     * 全局异常捕获处理
     * @param e
     * @return
     */
    @ExceptionHandler(value = Exception.class)
    public Result error(Exception e){
        e.printStackTrace();
        return new Result(false, StatusCode.ERROR, e.getMessage());
    }
}

2. 这里是Result实体类的代码,Result.java

package entity;

/**
 * Created by yhj on 2019/1/24.
 */
public class Result {

    private boolean flag;
    private Integer code;
    private String message;
    private Object data;

    public Result() {
    }

    public Result(boolean flag, Integer code, String message) {
        this.flag = flag;
        this.code = code;
        this.message = message;
    }

    public Result(boolean flag, Integer code, String message, Object data) {
        this.flag = flag;
        this.code = code;
        this.message = message;
        this.data = data;
    }

    public boolean isFlag() {
        return flag;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

3. 写到这里,其实这个简单的demo就完成了,经过测试也没有问题,返回的也是自己所写的实体JSON出错信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值