关于断言Assert的使用注意事项
前言
本来想写个全局异常的demo,使用Assert抛出MybatisPlusException异常,但是在使用Assert是发现个问题,故在此记录,防止以后掉坑。
一、Assert的使用
@RequestMapping(value = "testGlobalException",method = RequestMethod.POST)
public BaseResponse testGlobalException(@RequestBody Book book){
//Assert 断言,判断book.getBookName()为空时抛出异常
Assert.notNull(book.getBookName(),"书名不能为空");
return new BaseResponse(Msg.SUCCESS);
}
Assert有点奇怪,这里用的不是isNull,而是 notNull 。如:
判断某个字段为null时,抛出异常:Assert.notNull(book.getBookName(),“书名不能为空”);
从源码分析:
1:book.getBookName()为null,
2:此时object != null 为 false,
3:!expression 为 true,故会抛出异常
public static void notNull(Object object, String message, Object... params) {
isTrue(object != null, message, params);
}
public static void isTrue(boolean expression, String message, Object... params) {
if (!expression) {
throw ExceptionUtils.mpe(message, params);
}
}
二、注意点
在我目前的公司,传对象时,如果bookName没有值,那么入参是这样的:
{
“bookName”:""
}
此时,object != null 是为 false
!expression 为 false 不会抛出异常
总结
1:Assert判断某个字段为空时,抛出异常,用的是 notNull。
2: Assert判断"bookName":""这种参数,不等于null。