Spring Boot 进行优雅的字段校验,写得太好了!
作者 | 何甜甜在吗
来源 | juejin.cn/post/6913735652806754311
前段时间提交代码审核,同事提了一个代码规范缺陷:参数校验应该放在controller层。到底应该如何做参数校验呢
Controller层 VS Service层
去网上查阅了一些资料,一般推荐与业务无关的放在Controller层中进行校验,而与业务有关的放在Service层中进行校验。
那么如何将参数校验写的优雅美观呢,如果都是if - else,就感觉代码写的很low,还好有轮子可以使用
如果您正在学习Spring Boot,推荐一个连载多年还在继续更新的免费教程:http://blog.didispace.com/spring-boot-learning-2x/
常用校验工具类
使用Hibernate Validate
引入依赖
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>4.3.1.Final</version>
</dependency>
常用注解说明
使用姿势
需要搭配在Controller中搭配@Validated或@Valid注解一起使用,@Validated和@Valid注解区别不是很大,一般情况下任选一个即可,区别如下:
虽然@Validated比@Valid更加强大,在@Valid之上提供了分组功能和验证排序功能,不过在实际项目中一直没有用到过
Hibernate-validate框架中的注解是需要加在实体中一起使用的
定义一个实体
public class DataSetSaveVO {//唯一标识符为空@NotBlank(message = "user uuid is empty")//用户名称只能是字母和数字@Pattern(regexp = "^[a-z0-9]+$", message = "user names can only be alphabetic and numeric")@Length(max = 48, message = "user uuid length over 48 byte")private String userUuid;//数据集名称只能是字母和数字@Pattern(regexp = "^[A-Za-z0-9]+$", message = "data set names can only be letters and Numbers")//文件名称过长@Length(max = 48, message = "file name too long")//文件名称为空@NotBlank(message = "file name is empty")private String name;//数据集描述最多为256字节@Length(max = 256, message = "data set description length over 256 byte")//数据集描述为空@NotBlank(message = "data set description is null")private String description;
}
说明:message字段为不符合校验规则时抛出的异常信息
Controller层中的方法
@PostMapping
public ResponseVO createDataSet(@Valid @RequestBody DataSetSaveVO dataSetVO) {return ResponseUtil.success(dataSetService.saveDataSet(dataSetVO));
}
说明:在校验的实体DataSetSaveVO旁边添加@Valid或@Validated注解
如果您正在学习Spring Cloud,推荐一个连载多年还在继续更新的免费教程:https://blog.didispace.com/spring-cloud-learning/
使用commons-lang3
引入依赖
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.4</version>
</dependency>
常用方法说明
测试代码
//StringUtils.isEmpty
System.out.println(StringUtils.isEmpty("")); //true
System.out.println(StringUtils.isEmpty(" ")); //false
//StringUtils.isNotEmpty
System.out.println(StringUtils.isNotEmpty("")); //false//StringUtils.isBlank
System.out.println(StringUtils.isBlank("")); //true
System.out.println(StringUtils.isBlank(" ")); //true
//StringUtils.isNotBlank
System.out.println(StringUtils.isNotBlank(" ")); //falseList<Integer> emptyList = new ArrayList<>();
List<Integer> nullList = null;
List<Integer> notEmptyList = new ArrayList<>();
notEmptyList.add(1);//CollectionUtils.isEmpty
System.out.println(CollectionUtils.isEmpty(emptyList)); //true
System.out.println(CollectionUtils.isEmpty(nullList)); //true
System.out.println(CollectionUtils.isEmpty(notEmptyList)); //false//CollectionUtils.isNotEmpty
System.out.println(CollectionUtils.isNotEmpty(emptyList)); //false
System.out.println(CollectionUtils.isNotEmpty(nullList)); //false
System.out.println(CollectionUtils.isNotEmpty(notEmptyList)); //true
自定义注解
当上面的方面都无法满足校验的需求以后,可以考虑使用自定义注解。
往期推荐
浪潮的加班标语炸了,这是顶风作案?网传:1月加班87小时还要扣工资?
如果MySQL的自增 ID 用完了,怎么办?
手磨14nm咖啡,传播性病给60%的实习团队!这样的简历,90%的公司抛出橄榄枝?
我精通各种技术体系,因已45岁求职难!
朝阳群众举报阿里996造成交通严重堵塞!网友:谁举报下我们啊...
技术交流群
最近有很多人问,有没有读者交流群,想知道怎么加入。加入方式很简单,有兴趣的同学,只需要点击下方卡片,回复“加群“,即可免费加入我们的高质量技术交流群!
点击阅读原文,送你免费Spring Boot教程!
Spring Boot 进行优雅的字段校验,写得太好了!相关推荐
- Spring Boot + Redis 实现各种操作,写得太好了吧!
欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/qq_42105629/article/details/102589319 一.Jedis,Red ...
- Spring Boot 如何优雅的校验参数?
今天介绍一下 Spring Boot 如何优雅的整合JSR-303进行参数校验,说到参数校验可能都用过,但网上的教程大多是简单的介绍,所以我们今天详细看来一下 . 什么是 JSR-303? JSR-3 ...
- Spring Boot (16)---优雅的入门篇
Spring Boot (16)---优雅的入门篇 Spring一直是很火的一个开源框架,在过去的一段时间里,Spring Boot在社区中热度一直很高,所以决定花时间来了解和学习,为自己做技术储备. ...
- Spring Boot如何优雅的校验参数
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「乱敲代码」 做web开发有一点很烦人就 ...
- Springboot中优雅进行字段校验
欢迎关注方志朋的博客,回复"666"获面试宝典 前段时间提交代码审核,同事提了一个代码规范缺陷:参数校验应该放在controller层.到底应该如何做参数校验呢? | Contro ...
- Spring Boot(Cloud) 优雅停机
为了解决在微服务重启的过程中,可能出现一部分 http 请求处理失败的问题,提供一下方案 拟用方案: 第一步:重启前先从主动将服务剔除,并等待一段时间 第二步:停止服务并重启 一.主动将服务剔除 该方 ...
- 十、Spring boot 简单优雅的整合 Swagger2
文章目录 前言 pom.xml SwaggerConfig 接口中的配置 番外 前言 swagger2 是什么,我这里就不说了,就是一个简单的接口文档,方便前后端联调. 其实之前没有想要到要使用swa ...
- Sprinig Boot + Redis 实现接口幂等性,写得太好了!
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:收藏了!7 个开源的 Spring Boot 前后端分离优质项目个人原创+1博客:点击前往,查看更多 作者:wa ...
- 后端技术:Spring Boot 项目打包 + Shell 脚本部署实践,太有用了!
本篇和大家分享的是 Spring Boot 打包并结合 Shell 脚本命令部署,重点在分享一个shell 程序启动工具,希望能便利工作: profiles指定不同环境的配置 maven-assemb ...
最新文章
- Maven学习——安装与修改Maven的本地仓库路径
- 2021物理大事汇:μ子磁性异常,时间晶体现身,天体物理大丰收
- php的pdo如何访问SQLserver_php使用pdo连接sqlserver示例分享
- java 线程停止在那个为止_java停止线程
- mongodb集群搭建
- Wireshark-001基本设置
- BN层对神经网络神经元数据分布的影响
- LabVIEW状态机小灯按顺序点亮条件结构+自定义枚举
- TCP/IP协议 TCP包深入理解
- Perl语言入门14-17
- 四款主流同步软件介绍
- Linux系统蓝牙WiFi抓包命令
- 办公技巧:分享100个Excel快捷键,值得收藏!
- 《2020职场绿茶图鉴》
- QuickCHM V2.6
- 项目二-成员函数、友元函数和一般函数之区别
- 2018 Arab Collegiate Programming Contest (ACPC 2018) L.Looking for Taste(按位或)
- 数字信号处理——FFT
- LC99 Recover Binary Search Tree
- 劲爆战士第二部的陀螺叫什么名字