十四、springBoot2.0 自定义异常

说明:仅且返回状态为0时说明正确返回,其余都是异常或错误返回

1、封装返回数据状态,数据,信息Result .java

@ApiModel(description = "接口返回响应数据")
public class Result extends HashMap<String,Object> implements java.io.Serializable {

	public Result setSuccess(Object data) {
        return this.setSuccess("操作成功", data);
    }

    public Result setSuccess(String msg) {
        return this.setSuccess(msg, null);
    }

    public Result setSuccess(String msg, Object data) {
        this.put("msg", msg);
        this.put("data", data);
        this.put("status", BaseResponseCode.SUCCESS.getStatus());
        return this;
    }

    public Result setError(String msg) {
        return this.setError(msg, BaseResponseCode.ERROR.getStatus());
    }

    public Result setError(Integer status) {
        return this.setError("操作失败", status);
    }

    public Result setError(String msg, Integer status) {
        this.put("msg", msg);
        this.put("status", status);
        return this;
    }

    public Result setError(ResponseCodeInterface code) {
        this.put("msg", code.getMsg());
        this.put("status", code.getStatus());
        return this;
    }

    public Result setResult(String msg, Object data, Integer status) {
        this.put("msg", msg);
        this.put("data", data);
        this.put("status", status);
        return this;
    }
}

常量

2、封装异常返回数据

自定义异常接口

ResponseCodeInterface.java

public interface ResponseCodeInterface {

    int getCode();

    String getMsg();

}

枚举类:BaseResponseCode.java

public enum BaseResponseCode implements ResponseCodeInterface {

    SUCCESS(0, "操作成功"),
    ERROR(1, "操作异常"),

    /**
     * 账户异常
     */
    USER_EXIST(400001, "该用户已存在,请重新注册"),
    USER_EXIST1(400001, "该邮箱存在,请重新注册"),
    NOT_ACCOUNT(400002, "该用户不存在,请先注册"),
    USER_LOCK(400005, "该用户已被锁定,请联系运营人员"),
    ACCOUNT_ERROR(400009, "该账号异常,请联系运营人员"),
    PASSWORD_ERROR(400010,"用户名或密码错误"),
    OLD_PASSWORD_ERROR(400011,"旧密码不正确"),
    USER_PASSWORD_ERROR(400012,"用户或密码不正确"),

    /**
     * 请求参数异常
     */
    DATA_ERROR(400020,"传入数据异常"),


    /**
     * 前端操作异常
     */
    OPERATION_MENU_PERMISSION_CATALOG_ERROR(401031,"操作后的类型是目录,所属菜单必须为默认顶级菜单或者目录"),
    OPERATION_MENU_PERMISSION_MENU_ERROR(401032,"操作后的类型是菜单,所属菜单必须为目录类型"),
    OPERATION_MENU_PERMISSION_BTN_ERROR(401033,"操作后的类型是按钮,所属菜单必须为菜单类型"),

    /**
     * token异常
     */
    TOKEN_ERROR(401001, "登录凭证已过期,请重新登录"),
    TOKEN_PAST_DUE(401002, "授权信息已过期,请刷新token"),

    /**
     * 权限异常
     */
    UNAUTHORIZED_ERROR(403001, "权鉴校验不通过"),

    /**
     * 操作数据库异常
     */
    REGISTER_ERROR(500001, "注册失败,请尝试重新注册"),
    ;

    private final String msg;

    private final int status;

    BaseResponseCode(int status, String msg) {
        this.status = status;
        this.msg = msg;
    }

    @Override
    public int getStatus() {
        return status;
    }

    @Override
    public String getMsg() {
        return msg;
    }
}

异常类:BusinessException.java

public class BusinessException  extends RuntimeException {

    /**
     * 异常编号
     */
    private final int messageCode;

    /**
     * 对messageCode 异常信息进行补充说明
     */
    private final String detailMessage;

    public BusinessException(int messageCode,String message) {
        super(message);
        this.messageCode = messageCode;
        this.detailMessage = message;
    }
    /**
     * 构造函数
     * @param code 异常码
     */
    public BusinessException(ResponseCodeInterface code) {
        this(code.getCode(), code.getMsg());
    }

    public int getMessageCode() {
        return messageCode;
    }

    public String getDetailMessage() {
        return detailMessage;
    }

}

3、正常返回与异常返回

controller层  LoginRegisterController.java将调用下面service层方法

public Result register(RegisterReqVO vo){
        Result result= new Result();
        try {
            trUserService.register(vo);
            result.setSuccess("注册成功");
        } catch (BusinessException e) {
            e.printStackTrace();
            result.setError(e.getMessageCode(),e.getDetailMessage());
        } catch (Exception e) {
            e.printStackTrace();
            result.setError("注册异常");
            return result;
        }
        return result;
    }

service层:TRUserServiceImpl.java

@Override
public String register(RegisterReqVO vo) throws Exception {
    // 先检查数据库是否有在用的账号或邮箱,只要就一个就不注册
    if (BeanUtil.isNotEmpty(vo.getUsername())) {
        if (findByUsername(vo.getUsername())) {
            throw new BusinessException(BaseResponseCode.USER_EXIST);
        }
    }
    if (BeanUtil.isNotEmpty(vo.getEmail())) {
        if (findByEmail(vo.getEmail())) {
            throw new BusinessException(BaseResponseCode.USER_EXIST1);
        }
    }
    TRUser trUser = new TRUser();
    BeanUtils.copyProperties(vo, trUser);
    trUser.setSalt(PasswordUtils.getSalt());
    String encode = PasswordUtils.encode(vo.getPassword(), trUser.getSalt());
    trUser.setPassword(encode);
    trUser.setCreatDate(new Date());
    save(trUser);
    return trUser.getId();
}

说明:当正常返回或者走到Exception异常时返回Result,当走自定义异常BusinessException时,返回BusinessException中错误状态码与错误说明

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值