SpringBoot - 使用 Assert 校验让业务代码更简洁

点击上方“Java基基”,选择“设为星标”

做积极的人,而不是积极废人!

每天 14:00 更新文章,每天掉亿点点头发...

源码精品专栏

 

来源:artisan.blog.csdn.net/

article/details/123105926


有了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("用户不存在");
        }

    }

}

非空判断,大家都很熟悉哈

cd9b5560acb99fb92627ad9bd3b0168b.png

那用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判断,减少业务参数校验的代码行数,提高程序可读性,点赞~~~


大家都在用,随便一找,不信你看

212c19286e2a7b791663adb1aaf1b98f.png

【返回结果】

afc0aec81caa217262661546fbf3afdd.png

我们看下

92c5235a07ccf2ad2b438a2c7d5ed547.png

抛出的是 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());
}

当然了,我这个返回结果是被全局异常处理了的,如果没有全局异常处理,返回的是原生的这种错误

320b6458219ec83de9325ed10b45204c.png

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

org.springframework.util.Assert

我们看下Assert都有哪些方法

9d45ec20263ddb030740965048593138.png

简单分下类

对象和类型断言

函数说明
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元素

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud

  • 视频教程:https://doc.iocoder.cn/video/

源码

  • https://github.com/yangshangwei/boot2



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢

8344847345c90de3cac42279bda2c023.png

已在知识星球更新源码解析如下:

5fb6c5f8709a388a853ab71ddee58836.jpeg

753c84556b482eef35493e1c83caf612.jpeg

e6063d5a8d5117bae4ff15ad0e5ce644.jpeg

e63075a51c5b76522171cbd00808f34c.jpeg

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 6W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值