前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot - 使用Assert校验让业务代码更简洁

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

作者头像
小小工匠
发布2022-02-25 10:18:10
1.7K1
发布2022-02-25 10:18:10
举报
文章被收录于专栏:小工匠聊架构

文章目录

Pre

SpringBoot - 优雅的实现【参数校验】高级进阶

SpringBoot - 优雅的实现【自定义参数校验】高级进阶

SpringBoot - 优雅的实现【参数分组校验】高级进阶

有了Validator框架,还要Assert干啥子

简而言之 Validator只解决了参数自身的数据校验,解决不了参数和业务数据之间校验

我们来看个例子

代码语言:javascript
复制
/**
 * @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怎么写呢?

代码语言:javascript
复制
    /**
     * 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,所以全局异常处理一下

代码语言:javascript
复制
    /**
     * 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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/02/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • Pre
  • 有了Validator框架,还要Assert干啥子
  • org.springframework.util.Assert
    • 对象和类型断言
      • 文本断言
        • 逻辑断言
          • Collection和map断言
            • 数组断言
            • 源码
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档