文章目录
- Pre
- 有了Validator框架,还要Assert干啥子
- org.springframework.util.Assert
-
- 对象和类型断言
- 文本断言
- 逻辑断言
- Collection和map断言
- 数组断言
- 源码
文章图片
Pre SpringBoot - 优雅的实现【参数校验】高级进阶
SpringBoot - 优雅的实现【自定义参数校验】高级进阶
【【Spring|SpringBoot - 使用Assert校验让业务代码更简洁】SpringBoot - 优雅的实现【参数分组校验】高级进阶
SpringBoot - 使用Assert校验让业务代码更简洁
有了Validator框架,还要Assert干啥子
文章图片
简而言之 Validator只解决了参数自身的数据校验,解决不了参数和业务数据之间校验
我们来看个例子
/**
* @author 小工匠
* @version 1.0
* @mark: show me the code , change the world
*/@RestController
@Slf4j
@RequestMapping("/assert")
public class ArtisanController {@Autowired
private ArtisanDao artisanDao;
/**
* Validator只解决了参数自身的数据校验,解决不了参数和业务数据之间校验
*
* @param
* @return
*/
@PostMapping("/testNoAssert")
public void testNoAssert(@RequestParam("artisanId") String artisanId) {
Artisan artisan = artisanDao.selectArtisanReturnNull(artisanId);
if (artisan == null) {
throw new IllegalArgumentException("用户不存在");
}}}
非空判断,大家都很熟悉哈
文章图片
那用Assert怎么写呢?
/**
* Validator只解决了参数自身的数据校验,解决不了参数和业务数据之间校验
*
* @param
* @return
*/
@PostMapping("/testWithAssert")
public void testWithAssert(@RequestParam("artisanId") String artisanId) {
Artisan artisan = artisanDao.selectArtisanReturnNull(artisanId);
Assert.notNull(artisan, "用户不存在(Assert抛出)");
}
是不是发现Assert代码更优雅,更简洁,同样也能实现效果 .
Assert断言基本上替换传统的if判断,减少业务参数校验的代码行数,提高程序可读性,点赞~~~
文章图片
大家都在用,随便一找,不信你看
文章图片
【返回结果】
文章图片
我们看下
文章图片
抛出的是 IllegalArgumentException,所以全局异常处理一下
/**
* Assert异常
*/
@ExceptionHandler({IllegalArgumentException.class, IllegalStateException.class})
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public ResponseData exception(IllegalArgumentException e) {
return ResponseData.fail(ResponseCode.ILLEGAL_ARGUMENT.getCode(), e.getMessage());
}
文章图片
当然了,我这个返回结果是被全局异常处理了的,如果没有全局异常处理,返回的是原生的这种错误
文章图片
org.springframework.util.Assert 我们看下Assert都有哪些方法
文章图片
简单分下类
对象和类型断言
函数 | 说明 |
---|---|
notNull() | 假设对象不null |
isNull() | 检查对象为null |
isInstanceOf() | 检查对象必须为另一个特定类型的实例 |
isAssignable() | 检查类型 |
函数 | 说明 |
---|---|
hasLength() | 检查字符串不是空符串,意味着至少包含一个空白,可以使用hasLength()方法 |
hasText() | 增强检查条件,字符串至少包含一个非空白字符,可以使用hasText()方法 |
doesNotContain() | 检查参数不包含特定子串 |
函数 | 说明 |
---|---|
isTrue() | 条件为假抛出IllegalArgumentException 异常 |
state() | 该方法与isTrue一样,但抛出IllegalStateException异常 |
函数 | 说明 |
---|---|
Collection应用notEmpty() | Collection不是null并包含至少一个元素 |
map应用notEmpty() | 检查map不null,并至少包含一个entry(key,value键值对) |
函数 | 说明 |
---|---|
notEmpty() | 可以检查数组不null,且至少包括一个元素 |
noNullElements() | 确保数组不包含null元素 |
文章图片
源码 https://github.com/yangshangwei/boot2
推荐阅读
- 【Spring|SpringBoot - 优雅的实现【自定义参数校验】高级进阶
- spring|爽易购商城--后台管理
- spring|spring-boot和JPA多数据源整合
- java|写简洁java代码的小技巧
- Spring|SpringBoot整合Redis实现缓存(自动缓存 + 手动aop缓存)
- 服务端_java|SpringCloud极简入门>消息总线#bus
- SpringBoot|SpringBoot 札记 (SpringSecurity入门与整合)
- SpringBoot|SpringBoot 札记(入门)
- spring源码|spring源码-生命周期