有了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<String> exception(IllegalArgumentException e) {
return ResponseData.fail(ResponseCode.ILLEGAL_ARGUMENT.getCode(), e.getMessage());
}
当然了,我这个返回结果是被全局异常处理了的,如果没有全局异常处理,返回的是原生的这种错误
org.springframework.util.Assert
我们看下Assert都有哪些方法
简单分下类
对象和类型断言
文本断言
逻辑断言
Collection和map断言
数组断言
源码
https://github.com/yangshangwei/boot2
感谢阅读,希望对你有所帮助 :)
来源:artisan.blog.csdn.net/article/details/123105926
精彩推荐
原文始发于微信公众号(Java面试题精选):SpringBoot – 使用 Assert 校验让业务代码更简洁
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/131069.html