LambdaQueryWrapper<Info> QueryWrapper = new LambdaQueryWrapper<>();
QueryWrapper.eq(Info::getId, id);
Long count = InfoMapper.selectCount(QueryWrapper);
if (count > 0) {
throw new LeaseException(ResultCodeEnum.PARAM_ERROR);
}在讲解在增加自定义逻辑值之前 我们先引入业务场景
这是一个代码片段 通过id查询数量 如果数量大于0 则抛出异常
这个业务场景可以存在于计数规则 如果返回大于0的值 就可以自定义异常
在全局异常类中定义一个具体异常(具体异常的优先级在发生异常时要高于Exception异常)
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public Result error(Exception e){
e.printStackTrace();
return Result.fail();
}
@ExceptionHandler(LeaseException.class)
@ResponseBody
public Result error(LeaseException e){
e.printStackTrace();
return Result.fail(e.getCode(), e.getMessage());
}
}@Data
public class LeaseException extends RuntimeException {
//异常状态码
private Integer code;
/**
* 通过状态码和错误消息创建异常对象
* @param message
* @param code
*/
public LeaseException(String message, Integer code) {
super(message);
this.code = code;
}
/**
* 根据响应结果枚举对象创建异常对象
* @param resultCodeEnum
*/
public LeaseException(ResultCodeEnum resultCodeEnum) {
super(resultCodeEnum.getMessage());
this.code = resultCodeEnum.getCode();
}
@Override
public String toString() {
return "LeaseException{" +
"code=" + code +
", message=" + this.getMessage() +
'}';
}
} public static <T> Result<T> fail(Integer code, String message) {
Result<T> result = build(null);
result.setCode(code);
result.setMessage(message);
return result;
}