SpringBoot 如何进行业务校验,老鸟们都这么玩的~

news2024/9/23 5:35:42

throw new IllegalArgumentException(“用户不存在!”);

}

}

  1. 采用Assert能使代码更优雅,更简洁。

还是上面的例子,如果采用Assert可以这样写:

public void test2(int accountId) {

Account account = accountDao.selectById(accountId);

Assert.notNull(account, “用户不存在!”);

}

如何使用Assert?


在SpringBoot中使用Assert非常简单,直接使用Assert提供的静态方法即可。

@RestController

@RequestMapping(“assert”)

@Slf4j

public class AssertController {

@DeleteMapping(“/user/{id}”)

public void deleteUser(@PathVariable(“id”) String id) {

//模拟数据库查询用户

UserVO user =

getUserById(id);

Assert.notNull(user, “用户不存在!”);

}

private UserVO getUserById(String id) {

return null;

}

}

如上,AssertController有一个删除用户的接口,当删除用户时我们需要先校验用户是否存在。这里直接使用Assert.notNull()进行UserVO的非空校验。

此时访问接口,返回的json对象如下:

{

“timestamp”: “2022-01-10T14:17:13.335+00:00”,

“status”: 500,

“error”: “Internal Server Error”,

“message”: “”,

“path”: “/assert/user/javadaily”

}

从测试结果来看,assert抛出的异常是springboot原生json对象,很明显我们必须将其加入全局异常拦截器RestExceptionHandler

加入全局异常拦截器


查看Assert.notNull()方法,可以看到Assert抛出的是IllegalArgumentException异常,所以我们只需要在全局异常拦截器中加入IllegalArgumentException拦截即可。

/**

* Assert异常

*/

@ExceptionHandler(IllegalArgumentException.class)

@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)

public ResultData exception(IllegalArgumentException e) {

return ResultData.fail(ReturnCode.ILLEGAL_ARGUMENT.getCode(),e.getMessage());

}

此时再次访问接口,返回的数据结果为:

{

“status”: 3001,

“message”: “用户不存在!”,

“data”: null,

“timestamp”: 1641825258876

}

符合结果预期。

常见的Assert使用场景


  • 逻辑断言
  1. isTrue()如果条件为假抛出IllegalArgumentException 异常。

  2. state()该方法与isTrue一样,但抛出IllegalStateException异常。

  • 对象和类型断言
  1. notNull()通过notNull()方法可以假设对象不null:

  2. isNull()用来检查对象为null:

  3. isInstanceOf()使用isInstanceOf()方法检查对象必须为另一个特定类型的实例

  4. isAssignable()使用Assert.isAssignable()方法检查类型

  • 文本断言
  1. hasLength()如果检查字符串不是空符串,意味着至少包含一个空白,可以使用hasLength()方法。

  2. hasText()我们能增强检查条件,字符串至少包含一个非空白字符,可以使用hasText()方法。

  3. doesNotContain()我们能通过doesNotContain()方法检查参数不包含特定子串。

  • Collection和map断言
  1. Collection应用notEmpty()如其名称所示,notEmpty()方法断言collection不空,意味着不是null并包含至少一个元素。

  2. map应用notEmpty()同样的方法重载用于map,检查map不null,并至少包含一个entry(key,value键值对)。

  • 数组断言
  1. notEmpty()notEmpty()方法可以检查数组不null,且至少包括一个元素:

  2. noNullElements()noNullElements()方法确保数组不包含null元素

mpty()方法断言collection不空,意味着不是null并包含至少一个元素。

  1. map应用notEmpty()同样的方法重载用于map,检查map不null,并至少包含一个entry(key,value键值对)。
  • 数组断言
  1. notEmpty()notEmpty()方法可以检查数组不null,且至少包括一个元素:

  2. noNullElements()noNullElements()方法确保数组不包含null元素

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

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

相关文章

【力扣篇一】数组30题

前言 (12月5日)突然想起了很久以前别人(具体来源已经记不清了)传给我的一套题单。网上的题单不少,光收藏可不行,关键还得下手。 这套题单的题目数量为300出头,什么时候刷完我还没有明确计划&a…

对标40亿美金Webflow,「Towify」想用无代码方式搭建小程序

低代码和无代码的浪潮,在全球已经席卷了几次。今年以来,以低代码、无代码方式为主的网页开发、搭建工具受到了资本和市场的认可: 2022年8月,成立于2017年的低代码-内部程序开发平台Retool完成4500万美元融资,投后估值32亿美元。2022年3月,成立于2012年的无代码-外部网页搭…

关于魔趣刷机(含root)步骤

关于魔趣刷机(含root)步骤准备工作第一步:下载room和TWRP第二步:刷入TWRP到手机第三步:刷入room到手机第四步:安装Magisk app第四步:验证手机是否root参考链接准备工作 一台手机(推荐小米)、TW…

ADI Blackfin DSP处理器-BF533的开发详解28:SD卡的文件系统(含源码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 代码实现了通过文件系统读取 SD 卡上的文件,并对文件和文件夹做读、写、删除、建立、文件列表、文件搜索等功能&#xff0c…

【Pytorch】第 8 章 :实施政策梯度和政策优化

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

Git 客户端::Git Fork 注册版-NEW

Git Fork 是最简单有效的 Windows 客户端之一。许多开发人员正在使用此版本控制程序,它允许您协作处理您的项目。具有类似这样的用户界面的客户端可以使您的工作更轻松。 Fork 的 Fork 界面非常人性化。在右侧的左侧有大量的存储库和分支、标签、来源和藏匿处。此外…

【Pytorch】第 7 章 :深度 Q 网络实战

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

CleanMyMac X4.12.2免费版MAC电脑系统磁盘优化工具

我的 MacBook Pro 只有 256GB 硬盘空间,平时也勉强够用。但最近在升级新版本操作系统 macOS Ventura 13 时发现磁盘空间不够,导致不能升级。对于一个升级强迫症患者来说,任何的小红点都不能忍,更何况是系统升级这种事情。在确定了…

ARM 汇编初始化 SDRAM 详解

一、初始化代码框架介绍(函数调用和返回、步骤等) SDRAM 初始化使用一个函数 sdram_asm_init ,函数在 sdram_init.S 文件中实现,是一个汇编函数。 强调:汇编实现的函数在返回时需要明确使用返回指令(mov p…

1561_AURIX_TC275_电源管理以及监控

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) 从这个拓扑图中可以看的出来,AD相关部分的供电以及参考电压都是独立的,而且是来自于外部的。 1. LDO相关的模块有EVR33和EVR13. 2. 1.3V的供电之前只知道是一个内核…

win11:clion + cmake + mingw + glfw

clion & cmake 官网下载安装即可 clion的设置 mingw 链接 版本如下: windows系统只考虑选择x86_64-win32-sjlj和x86_64-win32-seh,区别: sjlj支持32位和64位seh只支持64位,比较新 glfw 官网提供下载:源码、…

[附源码]JAVA毕业设计学生公寓管理系统(系统+LW)

[附源码]JAVA毕业设计学生公寓管理系统(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术…

蜣螂算法(原理)

原文(附文献下载) 1 群体智能优化算法 SI(swarm intelligence)系统的特点是个体间的相互作用促进了智能行为的出现。 SI优化过程的实现主要包括以下两个步骤: 在搜索空间范围内创建一组随机个体在迭代过程中组合、移动或进化这些随机个体。 每种优化算法的区别…

基于java+springmvc+mybatis+jsp+mysql的校园办公室报修管理系统

项目介绍 校园办公室报修管理系统,是基于java编程语言,ssm框架,jsp技术,mysql数据库开发,本系统主要分为用户,教师,管理员,维修员四个角色,其中用户的功能是注册和登陆系…

【多尺度融合:基于深度学习:压缩图像伪像:blocking artifact】

Deep learning-based compressed image artifacts reduction based onmulti-scale image fusion (基于多尺度图像融合的基于深度学习的压缩图像伪影减少) 在基于块的图像/视频压缩平台中,视觉上明显的压缩伪像之一称为blocking artifact&…

CubeIDE新建工程

使用CubeIDE新建工程 开发流程如图(图片来源于b站教程): 1、新建工程 打开CubeIDE,选择文件>新建>STM32Project 软件自己会下载hal库,首次下载可能会有些慢,请耐心等待。 下载完成后,自…

基于java+springmvc+mybatis+jsp+mysql的个人所得税服务系统

项目介绍 随着居民的收入不断提高,个人都需要缴纳一定比例的个人所得税,传统的方式是去税务大厅人工缴纳,为了解决这种人工交税的方式,特此开发了一个在线交税的网站,本系统采用java语言开发,后端采用ssm框…

微服务框架 SpringCloud微服务架构 微服务保护 34 规则持久化 34.2 实现push 模式

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 微服务保护 文章目录微服务框架微服务保护34 规则持久化34.2 实现push 模式34.2.1 规则管理模式 - 实现push 模式34 规则持久化 34.2 实现p…

【LeetCode每日一题:1827. 最少操作使数组递增~~~贪心遍历模拟】

题目描述 给你一个整数数组 nums (下标从 0 开始)。每一次操作中,你可以选择数组中一个元素,并将它增加 1 。 比方说,如果 nums [1,2,3] ,你可以选择增加 nums[1] 得到 nums [1,3,3] 。 请你返回使 num…

Opencv中关于特征点匹配定位的问题(一)

Opencv中关于特征点匹配定位的问题回顾定位回顾 在我们检测到特征点之后,通常进行特征点的匹配。 首先我们先回顾一下使用Brute-Force匹配器来进行匹配。 import cv2 import numpy as np import matplotlib.pyplot as plt#读取图片 imgcv2.imread(./newmm.png) te…