美文网首页
项目中统一异常处理

项目中统一异常处理

作者: 养一只tom猫 | 来源:发表于2020-04-30 21:31 被阅读0次

在开发时,难免各种if else代码判断用户请求是否包含***,那么我们如何让用户更清楚的知道自己要干什么,错在哪里了呢?
这时候就需要用到统一异常处理了!
为什么需要异常处理:就算后台异常了,也不能展示给用户看到,应该给用户一种友好提示,提高用户体验度。

如何处理:可使用全局异常处理器对异常进行处理。

可以看看如下代码:

/**
 * 统一异常处理类
 */
@ControllerAdvice//声明该类是一个增强类
public class BaseExceptionHandler {
    
    @ExceptionHandler(value = Exception.class)//Exception.class表示对所有异常进行处理
    @ResponseBody
    public Result error(Exception e){
        e.printStackTrace();
        return new Result(false,StatusCode.ERROR,"服务器太忙了,请您稍后重试");
    }
}

上面的代码虽然对异常进行了处理,但是提示很单一,并且不够友好,虽然不会直接抛出异常信息被用户浏览到,但是提示信息太单一了。
那么我们如何给出用户更友好的提示?
可以自定义异常类,定义一个枚举对各种错误信息进行封装,@ExceptionHandler(value = MyException.class)在全局异常处理类中抓我们自定义的异常,然后获取异常信息,返回给前端。

MyException:是我们自定义的异常类,当用户在不满足某些条件时访问我们的接口,我们则抛出自定义异常。

public enum ExceptionResultCode {
    TIMEOUT_EXCEPTION(100, "对不起,网络开小差了"),
    PARAM_ERROR(101,"参数不合法"),
    PASSWORD_ERROR(102,"密码错误"),
    OTHER_ERROR(200,"未知错误,请联系管理员,管理员手机号码:*****(前两天和你吵过架的同事电话)");
//此处省略n种异常信息

    private Integer code;
    private String desc;

    private ExceptionResultCode(Integer code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public Integer getCode() {
        return code;
    }

    public String getDesc() {
        return desc;
    }
}

自定义异常代码:

/**
 * 自定义异常处理类
 */
public class MyBusinessException extends RuntimeException{

    private ExceptionResultCode exceptionResultCode;

    private MyBusinessException(ExceptionResultCode exceptionResultCode) {
        this.exceptionResultCode = exceptionResultCode;
    }

    public ExceptionResultCode getExceptionResultCode() {
        return exceptionResultCode;
    }

    public static MyBusinessException throwException(ExceptionResultCode exceptionResultCode){
        throw new MyBusinessException(exceptionResultCode);
    }
}

具体应用示例:

  public void update(User user) {
        if (userMapper.selectByPrimaryKey(user.getId()) == null){
            MyBusinessException.throwException(ExceptionResultCode.PARAM_ERROR);
        }
        brandMapper.updateByPrimaryKey(brand);
    }

这样就能给出用户更友好的提示了!

相关文章

网友评论

      本文标题:项目中统一异常处理

      本文链接:https://www.haomeiwen.com/subject/idtxghtx.html