SpringBoot - 使用Assert校验让业务代码更简洁
文章目录
- Pre
- 有了Validator框架,还要Assert干啥子
- org.springframework.util.Assert
- 对象和类型断言
- 文本断言
- 逻辑断言
- Collection和map断言
- 数组断言
- 源码
Pre
SpringBoot - 优雅的实现【参数校验】高级进阶
SpringBoot - 优雅的实现【自定义参数校验】高级进阶
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 {@Autowiredprivate 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都有哪些方法
简单分下类
对象和类型断言
函数 | 说明 |
---|---|
notNull() | 假设对象不null |
isNull() | 检查对象为null |
isInstanceOf() | 检查对象必须为另一个特定类型的实例 |
isAssignable() | 检查类型 |
文本断言
函数 | 说明 |
---|---|
hasLength() | 检查字符串不是空符串,意味着至少包含一个空白,可以使用hasLength()方法 |
hasText() | 增强检查条件,字符串至少包含一个非空白字符,可以使用hasText()方法 |
doesNotContain() | 检查参数不包含特定子串 |
逻辑断言
函数 | 说明 |
---|---|
isTrue() | 条件为假抛出IllegalArgumentException 异常 |
state() | 该方法与isTrue一样,但抛出IllegalStateException异常 |
Collection和map断言
函数 | 说明 |
---|---|
Collection应用notEmpty() | Collection不是null并包含至少一个元素 |
map应用notEmpty() | 检查map不null,并至少包含一个entry(key,value键值对) |
数组断言
函数 | 说明 |
---|---|
notEmpty() | 可以检查数组不null,且至少包括一个元素 |
noNullElements() | 确保数组不包含null元素 |
源码
https://github.com/yangshangwei/boot2
SpringBoot - 使用Assert校验让业务代码更简洁相关推荐
- 一名Android程序员如何减少代码中该死的-if-else-嵌套,怎么让代码更简洁?
减少代码中该死的-if-else-嵌套,让代码更简洁! 写在前面 不知大家有没遇到过像"横放着的金字塔"一样的if else嵌套: if (true) {if (true) {if ...
- ES6技巧和窍门,使您的代码更简洁,更短且更易于阅读!
by Sam Williams 通过山姆·威廉姆斯 ES6技巧和窍门,使您的代码更简洁,更短且更易于阅读! (ES6 tips and tricks to make your code cleaner ...
- 如何在SpringWEB项目或者Springboot启动时直接执行业务代码(三种方式)
我的博客原文链接 前言 通常的我们的项目开发中,经常会遇到那种在服务一启动就需要自动执行一些业务代码的情况.比如将数据库中的配置信息或者数据字典之类的缓存到redis,或者在服务启动的时候将一些配置化 ...
- 掌握这几个减少 try catch 的方法,让代码更简洁!
来源:cnblogs.com/jurendage/p/11255197.html 背景 软件开发过程中,不可避免的是需要处理各种异常,就我自己来说,至少有一半以上的时间都是在处理各种异常情况,所以代码 ...
- 还在手写 Getter/Setter 方法吗?Lombok 让你的代码更简洁!
以下是文章大纲: Lombok 是什么? 官网:https://projectlombok.org/ Lombok 是一个 Java 库,使用 Lombok 可以通过简单的注解帮助我们消除 Java ...
- SpringBoot引用lombok让代码更简洁
1.引用依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok< ...
- python简单代码编写-新手写Python,8招让你的代码更简洁更Pythonic!
Python是一门非常灵活的语言,很多语法是其他语言不具备的,特别是对于从C.Java等语言转向Python的人来说,很容易按照C.Java等语言的写法来写Python,对于初学者来说,如果对Pyth ...
- 快用一用 lambda 表达式吧,让你的代码更简洁、更漂亮!
目录 lambda 表达式 定义 lambda 表达式 捕获子句 按值捕获 按引用捕获 捕获特定的变量 捕获this指针 结合 lambda 使用 STL 算法 lambda 表达式 lambda 表 ...
- python代码书写_Python代码的优雅写法,让代码更简洁
我们都知道,Python 的设计哲学是「优雅」.「明确」.「简单」.这也许很多人选择 Python 的原因.但是我收到有些伙伴反馈,他写的 Python 并不优雅,甚至很臃肿,那可能是你的姿势不对哦! ...
最新文章
- MySQL实现差集(Minus)和交集(Intersect)
- php 伪静态是什么意思,路由与伪静态
- python3 学习日志 Microsoft Office 编程
- deepin系统文本编辑器
- VCC、VDD、VSS等是什么意思
- 安全优雅的RESTful API签名实现方案(手机端)
- 运用集合实现用户的注册和登录
- 【C语言】计算圆周长以及面积
- 处在腾讯音乐与网易云音乐夹缝中,库客音乐上市能否奏响主旋律?
- es module 和 commonjs 模块化实践
- 使用netstat查看tcp连接、udp连接
- 实践指南-网页生成PDF
- 四种简单的图像显著性区域特征提取方法-----AC/HC/LC/FT。
- H264编码器13(CAVLC和CABAC简介)
- HTML5新标签与特性(笔记)
- [python] 基于NetworkX实现网络图的绘制
- 算数编码的原理及C++实现
- 基金投资从入门到精通]之“投资技巧篇
- php文件类型验证,包含漏洞 文件类型白名单验证及判断后缀的解决办法
- swjtu2382(Paint Box)
热门文章
- 盘点网站百度快照回档或不更新的12种原因
- css文件 如何使背景图片大小适应div的大小
- 使用 Rodeo 分析总统候选人的推特内容
- TextView一行没有显示满就跳到下一行
- 中科寒武纪 AI 芯片弯道超车:NPU 为深度学习而 生、指令集是产业根本
- 数据挖掘中的中国身份证结构解析
- 使用netlink机制在内核与应用程序之间通信
- IntelliJ IDEA 2019.1 下载破解补丁激活【亲测有效】
- onclick事件的基本操作
- 计算机科学与技术高校综合测评,计算机科学与技术院研究生综合测评实施细则(学术型)(2017年6月修订)(试用稿) ......