文章目录

  • 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校验让业务代码更简洁相关推荐

  1. 一名Android程序员如何减少代码中该死的-if-else-嵌套,怎么让代码更简洁?

    减少代码中该死的-if-else-嵌套,让代码更简洁! 写在前面 不知大家有没遇到过像"横放着的金字塔"一样的if else嵌套: if (true) {if (true) {if ...

  2. ES6技巧和窍门,使您的代码更简洁,更短且更易于阅读!

    by Sam Williams 通过山姆·威廉姆斯 ES6技巧和窍门,使您的代码更简洁,更短且更易于阅读! (ES6 tips and tricks to make your code cleaner ...

  3. 如何在SpringWEB项目或者Springboot启动时直接执行业务代码(三种方式)

    我的博客原文链接 前言 通常的我们的项目开发中,经常会遇到那种在服务一启动就需要自动执行一些业务代码的情况.比如将数据库中的配置信息或者数据字典之类的缓存到redis,或者在服务启动的时候将一些配置化 ...

  4. 掌握这几个减少 try catch 的方法,让代码更简洁!

    来源:cnblogs.com/jurendage/p/11255197.html 背景 软件开发过程中,不可避免的是需要处理各种异常,就我自己来说,至少有一半以上的时间都是在处理各种异常情况,所以代码 ...

  5. 还在手写 Getter/Setter 方法吗?Lombok 让你的代码更简洁!

    以下是文章大纲: Lombok 是什么? 官网:https://projectlombok.org/ Lombok 是一个 Java 库,使用 Lombok 可以通过简单的注解帮助我们消除 Java ...

  6. SpringBoot引用lombok让代码更简洁

    1.引用依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok< ...

  7. python简单代码编写-新手写Python,8招让你的代码更简洁更Pythonic!

    Python是一门非常灵活的语言,很多语法是其他语言不具备的,特别是对于从C.Java等语言转向Python的人来说,很容易按照C.Java等语言的写法来写Python,对于初学者来说,如果对Pyth ...

  8. 快用一用 lambda 表达式吧,让你的代码更简洁、更漂亮!

    目录 lambda 表达式 定义 lambda 表达式 捕获子句 按值捕获 按引用捕获 捕获特定的变量 捕获this指针 结合 lambda 使用 STL 算法 lambda 表达式 lambda 表 ...

  9. python代码书写_Python代码的优雅写法,让代码更简洁

    我们都知道,Python 的设计哲学是「优雅」.「明确」.「简单」.这也许很多人选择 Python 的原因.但是我收到有些伙伴反馈,他写的 Python 并不优雅,甚至很臃肿,那可能是你的姿势不对哦! ...

最新文章

  1. MySQL实现差集(Minus)和交集(Intersect)
  2. php 伪静态是什么意思,路由与伪静态
  3. python3 学习日志 Microsoft Office 编程
  4. deepin系统文本编辑器
  5. VCC、VDD、VSS等是什么意思
  6. 安全优雅的RESTful API签名实现方案(手机端)
  7. 运用集合实现用户的注册和登录
  8. 【C语言】计算圆周长以及面积
  9. 处在腾讯音乐与网易云音乐夹缝中,库客音乐上市能否奏响主旋律?
  10. es module 和 commonjs 模块化实践
  11. 使用netstat查看tcp连接、udp连接
  12. 实践指南-网页生成PDF
  13. 四种简单的图像显著性区域特征提取方法-----AC/HC/LC/FT。
  14. H264编码器13(CAVLC和CABAC简介)
  15. HTML5新标签与特性(笔记)
  16. [python] 基于NetworkX实现网络图的绘制
  17. 算数编码的原理及C++实现
  18. 基金投资从入门到精通]之“投资技巧篇
  19. php文件类型验证,包含漏洞   文件类型白名单验证及判断后缀的解决办法
  20. swjtu2382(Paint Box)

热门文章

  1. 盘点网站百度快照回档或不更新的12种原因
  2. css文件 如何使背景图片大小适应div的大小
  3. 使用 Rodeo 分析总统候选人的推特内容
  4. TextView一行没有显示满就跳到下一行
  5. 中科寒武纪 AI 芯片弯道超车:NPU 为深度学习而 生、指令集是产业根本
  6. 数据挖掘中的中国身份证结构解析
  7. 使用netlink机制在内核与应用程序之间通信
  8. IntelliJ IDEA 2019.1 下载破解补丁激活【亲测有效】
  9. onclick事件的基本操作
  10. 计算机科学与技术高校综合测评,计算机科学与技术院研究生综合测评实施细则(学术型)(2017年6月修订)(试用稿) ......