工作小技巧,封装if和Exception

news2025/2/24 21:19:51

在我们的工作中,经常会有这样的逻辑,就是判断一个参数是否合法,不合法就抛出异常,再由全局异常捕获后返回。

本文使用我编写的springboot日记本系统作为蓝本,,在已有项目的基础上改,源码下载地址和教程在文末。

比如controller中有这样一个注册方法:

@RequestMapping("register")
public Result register(@RequestBody User user){
    if(StrUtil.isEmpty(user.getUserName())){
        throw new BizException(ExceptionCodeEnum.ERROR_PARAM.setDesc("用户名不允许为空!"));
    }
    if(StrUtil.isEmpty(user.getPassword())){
        throw new BizException(ExceptionCodeEnum.ERROR_PARAM.setDesc("密码不允许为空!"));
    }
    //检查用户名是否重复
    if(userService.getByUserName(user.getUserName()) != null){
        throw new BizException(ExceptionCodeEnum.ERROR_PARAM.setDesc("用户名"+user.getUserName()+"重复!"));
    }
    //拼装userBean
    user.setUid(redisServiceImpl.getIncr("userId")); //redis自增ID
    user.setPassword(SecureUtil.md5(user.getPassword() + salt));
    user.setCreateTime(DateUtil.now());
    user.setUpdateTime(DateUtil.now());
    userService.save(user);
    return Result.success();
}

重点就是这个:

if(StrUtil.isEmpty(user.getUserName())){
   throw new BizException(ExceptionCodeEnum.ERROR_PARAM.setDesc("用户名不允许为空!"));
}

我们习惯先用if判断一个参数的合法性,如果不合法就抛出异常。

这样做自然没有问题,但是如果这样的判断很多,代码就会变得臃肿。

怎么简化呢?

我们可以从之前的逆向思维改为正向思维,就是所谓的断言

比如这个逻辑是当检测到用户名为空,就抛出异常。那我们可以把这个逻辑改成:我要求这个用户名必须非空,否则就抛出异常。

让我们编写一个校验类和方法。

/**
 * 通用校验工具类
 */
@Slf4j
public class VerifyBusinessUtil {

    /**
     * 断言
     * @param judge
     * @param error
     */
    public static void checkArguments(boolean judge,String error){
        if(!judge){
            log.error("{}", error);
            throw new BizException(ExceptionCodeEnum.ERROR_PARAM,error);
        }
    }

}

这段代码是一个通用校验工具类,其中包含了一个名为checkArguments的方法,该方法接收两个参数:一个boolean类型的判断条件judge和一个String类型的错误信息error。

在方法内部,首先使用Slf4j注解定义了一个log对象,用于记录错误信息。然后,如果judge为false,即判断条件不成立,就会抛出一个BizException异常,并将错误信息error和异常码ExceptionCodeEnum.ERROR_PARAM一起传入异常中。

该方法主要用于校验输入参数是否合法,如果不合法则会抛出异常并打印错误信息。

然后可以改写之前的if语句

@RequestMapping("register")
public Result register(@RequestBody User user){
    VerifyBusinessUtil.checkArguments(!StrUtil.isEmpty(user.getUserName()),"用户名不允许为空!");
    VerifyBusinessUtil.checkArguments(!StrUtil.isEmpty(user.getPassword()),"密码不允许为空!");
    VerifyBusinessUtil.checkArguments(userService.getByUserName(user.getUserName()) == null,"用户名"+user.getUserName()+"重复!");
   
    //拼装userBean
    user.setUid(redisServiceImpl.getIncr("userId")); //redis自增ID
    user.setPassword(SecureUtil.md5(user.getPassword() + salt));
    user.setCreateTime(DateUtil.now());
    user.setUpdateTime(DateUtil.now());
    userService.save(user);
    return Result.success();
}

是不是清爽了许多呢?

哈哈,这就是大部分企业里面都会封装的一个方法,很好用,也确实有它的道理。

如果你是第一次见到这种写法,那么就赶紧用起来吧!~

源码下载

这个案例我是在 springboot日记本系统 里面完成了,有需要源码的小伙伴直接clone这个项目即可。

https://gitee.com/skyblue0678/diary

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/619189.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

思科小型网络配置实例

一、配置思路 1.交换机上配置端口连接描述,在实际工作中很有用 2.外网配置,模拟外网:PC的IP地址200.200.200.2,Server的IP地址是200.200.200.3,网关都是200.200.200.1。SW-ISP的连接PC和Server-ISP的口属于vlan 3,&…

【vue】二:核心处理---vue的生命周期

文章目录 1.Vue生命周期的四个阶段,八个钩子2.vue的生命周期图例3. 初始阶段:虚拟DOM生成4. 挂载阶段:真实DOM生成5. 更新阶段:data变化重新渲染6. 销毁阶段:卸载所有,销毁vm 1.Vue生命周期的四个阶段&…

Appium利用xpath查找同级节点兄弟节点方法

当页面存在两个文件夹,结构相同,只有文件夹名称不同时,想要点击某一个文件夹上的某个控件。这个时候需要使用xpath定位。 1.由父节点定位子节点 driver.findElementByXPath(//XCUIElementTypeCell/XCUIElementTypeStaticText[name"标签…

Java网络开发(Tomcat)—— 用Jsp语法 到 实现数据的分页展示 到 只看自己的数据 + 模糊查询 迭代升级

目录 引出0.jsp的使用和语法 & 报错和解决(1)后端共享,前端获取 ${pageInfo}(2)如果想获取pageInfo这个对象的某个属性值,用 点 属性 ${pageInfo.pages}(3)如果想回传&#xff…

前端性能测试必备测试工具

我们在使用网站过程中,经常会遇到慢的问题,为了找到原因,一般需要借助工具进行检测,通过工具,可以检测出前端站点加载资源的相关详细情况。 今天,就给大家介绍几款前端性能测试分析工具,结合性能…

为什么性能测试PR单机版要升级到P-One一站式性能测试平台

目前市面上常用的性能测试工具均为单机版,导致了一些问题: 1.脚本无法进行共享; 2.执行管理无法进行统一化、协同化管理; 3.项目经理只能通过日报或者线下沟通获取当前项目进度; 4.对测试结果只能通过文件传输的方式进…

Linux安装Nginx详细教程

文章目录 下载安装包开始安装相关命令 下载安装包 官网下载:http://nginx.org/en/download.html 自己找一个安装目录 我这里进入到usr/local下创建一个安装软件目录 cd /usr/local mkdir softwore cd softwore使用ftp工具或者windows命令行将下载好的nginx安装包…

家居行业内卷?创新乏力?十大关键词解读IF ROOM如何定义未来主义家居

中商产业研究院今年早前发布的《中国家居市场前景及投资机会研究报告》显示,2021年中国定制家居行业的市场规模已经突破4000亿元,2016-2021年复合增长率达16%,行业保持良好的发展态势,预计2023年中国定制家居市场规模能突破5000亿…

2023年了, 你还不会使用node.js做压力测试?

背景 前些天刷抖音,看到网传的Java继父,求人攻击压测他的网站,这不得摩拳擦掌。 所以今天来聊聊如何对自己的项目、接口进行压力测试。 压力测试的目的 首先, 绝对不是为了压测、攻击别人的网站为乐。 1、探索线上系统流量承载的极限&…

jvm中类和对象定义存储基础知识 | 京东云技术团队

1 类文件数据结构类型 Class文件结构主要有两种数据结构:无符号数和表 •无符号数:用来表述数字,索引引用、数量值以及字符串等,比如 图1中类型为u1,u2,u4,u8分别代表1个字节,2个字节,4个字节&#xff0c…

2023“水博会”召开,千寻位置携智慧水利创新方案登台亮相

6月7日,“2023中国水博览会暨第十八届中国(国际)水务高峰论坛”(简称“水博会”)在江苏南京开幕。千寻位置基于北斗时空能力,打造多款水利数字孪生解决方案,在本次水博会上亮相。 水利数字孪生工…

SNAP重采样哨兵2号 L2A级数据报错 Invalid S2 source product解决办法

原来安装的SNAP7.0:esa-snap_all_windows-x64_7_0.exe 重采样时报错: A problem occurred during the target product initialisation. Type: OperatorException Message: Invalid S2 source product 解决办法:下载SNAP新版本9.0 http:/…

再看const成员函数

文章目录 再看函数重载const成员函数保安(const)能保护所有人(类成员)吗?mutable修饰类成员 const/非const成员函数的复用 关于函数重载实际上我理解不是很深入,直接导致const成员函数这块出大问题&#xf…

SpringBoot+Vue 的网上图书商城管理系统

文章目录 1. 简介2 技术栈3.1系统功能 4系统设计4.1数据库设计 5系统详细设计5.1系统功能模块5.1系统功能模块5.2管理员功能模块 源码下载 1. 简介 本次设计任务是要设计一个网上图书商城,通过这个系统能够满足网上图书商城的管理功能。系统的主要功能包括首页、个…

第二十一章_Redis的缓存过期淘汰策略

Redis内存满了怎么办 redis 一共有 4 个命令来设置键的生存时间&#xff08;可以存活多久&#xff09;或过期时间&#xff08;什么时候被删除&#xff09; expire <key> <ttl>&#xff1a;将 key 的生存时间设置为 ttl 秒pexpire <key> <ttl>&#xf…

仓储WMS对接淘宝奇门详细说明【亲测可用】

文章目录 简介名词解释奇门对接方案前期准备系统调用流程代码实现思路关键点(个人观点)奇门对接关键代码可能遇到的问题 简介 淘宝奇门项目支持 ERP、WMS 之间的系统标准化对接&#xff0c;通过构建 ERP、WMS 系统之间标准通信协议来实现不同系统之间的打通&#xff1b;对商家…

day07——决策树

决策树 一、认识决策树二、API三、案例&#xff1a;泰坦尼克号乘客生存预测1&#xff0c;题目概述2&#xff0c;分析3&#xff0c;代码4&#xff0c;保存树结构 一、认识决策树 决策树思想的来源非常朴素&#xff0c;程序设计中的条件分支结构就是if-then结构&#xff0c;最早…

从2023年Q1,看当下的量子产业

光子盒研究院 一旦实现商业化&#xff0c;量子计算将带领人类进入一个全新的领域。 今天&#xff0c;人工智能(AI)、ChatGPT等大语言模型的处理能力受限于芯片有限的表面积&#xff1a;超过一定数量的GPU&#xff0c;每个GPU的批处理量就会变小——进一步增加数量反而会增大成本…

httprunner 2.x介绍与使用

一、原文地址&#xff1a; 使用说明_httprunner2.0 概述及使用说明 httprunner2接口测试框架说明文档 - 简书 二、介绍 HttpRunner是一款面向 HTTP(S) 协议的通用测试框架&#xff0c;只需编写维护一份 YAML/JSON 脚本&#xff0c;即可实现自动化测试、性能测试、线上监控、…

HTML5、CSS3和JavaScript的基础知识以及从入门到精通的学习路径

摘要&#xff1a; HTML5、CSS3和JavaScript是现代Web开发的核心技术&#xff0c;掌握它们对于想要从事Web开发的人来说至关重要。本文将介绍HTML5、CSS3和JavaScript的基础知识以及从入门到精通的学习路径。通过深入理解这三种技术的特性和用法&#xff0c;并结合实践项目&…