异常处理_人为抛出异常

目的

解决代码中复杂的if...else语句 ,当遇到阻止程序继续正常运行的情况时,使用人为抛出异常的方式代替if...else。

创建自定义异常类

自定义异常类的目的是 因为异常有很多种,我们这里解决的异常只是程序业务实现中的异常
自定义的异常类继承Exception类

public class BusinessException extends Exception{
    public BusinessException(String message){
        super(message);
    }
}

和枚举类信息融合,优化使用吗,枚举类代码也可以这么写

public class BusinessException extends Exception {
    public BusinessException(MessageMeta messageMeta){
        super(messageMeta.getMsg());
    }
}

这样在throw new BusinessException(“”)时就不需要再调用枚举类的getMsg()方法了

使用try catch来接受处理异常

在serviceImpl层的异常抛出来并在Controllor层中接受处理

@Override
    public LuckyMoney receiveLuckyMoney(LuckyMoney luckyMoney) throws BusinessException {
        LuckyMoney result;
        LuckyMoney verify = luckyMoneyMapper.findById(luckyMoney.getId());
            if (verify == null) {
                throw new BusinessException(MessageType.noId.getMsg());
            }
            if (verify.getConsumer() != null) {
                //String.format()
                throw new BusinessException(String.format(MessageType.receiveByOthers.getMsg(), verify.getConsumer()));
            }
            if (luckyMoneyMapper.update(luckyMoney) == 0) {
                throw new BusinessException(MessageType.receiveError.getMsg());
            }
            result = luckyMoneyMapper.findById(luckyMoney.getId());
        return result;
    }

在Controllor层对该方法进行try catch 并对异常进行处理

    @PutMapping("/receive")
    public ResultUtils receiveLuckyMoney(LuckyMoney luckyMoney){
        ResultUtils resultUtils;
        try {
            resultUtils = ResultUtils.success(luckyMoneyService.receiveLuckyMoney(luckyMoney)) ;
        }catch (BusinessException e){
            log.info("",e);
            resultUtils = ResultUtils.error(e.getMessage());
        }
        return resultUtils;
    }

你可能感兴趣的:(异常处理_人为抛出异常)