-
BeanValidation参数校验笔记
2018-12-09 21:13:11Bean Validation是一个验证参数的规范,能简化代码,让我们尽量避免写很多的冗余的代码来校验输入参数的正确性,特别是暴露给外部用的api,必须要做参数验证,下面就将常用的验证方式做一个记录。 步骤 1) pom中...前言
Bean Validation是一个验证参数的规范,能简化代码,让我们尽量避免写很多的冗余的代码来校验输入参数的正确性,特别是暴露给外部用的api,必须要做参数验证,下面就将常用的验证方式做一个记录。
步骤
- 1) pom中引入Bean validation的实现hibernate-validator
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.13.Final</version> </dependency>
- 2)定义接收参数的实体,加上验证注解
@NotNull(message = "姓名不能为空!") private String name; @NotEmpty(message = "手机号不能为空及空字符") @Size(min = 11, max = 11, message = "手机号为11位") private String phone;
- 3) 创建校验器,编写测试类
Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); /** * 校验规则:object != null; */ @Test public void testNotNull(){ User user = new User(); user.setName("侠梦"); //size=0 // user.setName(""); //size =0 // user.setName(null); //size = 1 Set<ConstraintViolation<User>> violations = validator.validate(user); Assert.assertEquals(violations.size(),0); }
- 4) 结合java8升华校验
- 校验集合内部的元素,注意正确写法是写在声明的泛型类型前面,而不是像传统校验一样另起一行,这样会导致异常No validator could be found for constraint ‘javax.validation.constraints.NotBlank’ validating type 'java.util.List<java.lang.String>
private List<@NotBlank(message = "存在的邮箱元素不能为空") String> emails; private Map<@Email String, @NotNull User> customers;
- 结合Optional校验
private Integer age; public Optional<@Min(18) Integer> getAge() { return Optional.ofNullable(age); }
- 5)自定义验证器
- 开发中,经常会有很多字段,固定就只能是一些范围内的值,我们可以自定义一个验证器来约束它们,例如:用户来源这个字段,只会有三种,微信、qq和微博,首先我们定义一个@interface注解,通过Constraint的validatedBy指定一个验证器,在验证器中,实现ConstraintValidator接口,覆写isValid方法,让@UserSource校验的字段,只能是这三个值。
@Retention(RetentionPolicy.RUNTIME) @Target( { ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD }) @Constraint(validatedBy = {UserTypeValidator.class}) @Documented public @interface UserSource { String message() default "用户来源不正确,请检查!"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; } public class UserTypeValidator implements ConstraintValidator<UserSource, String> { private List<String> sources = Arrays.asList(new String[]{"wechat","qq","weibo"}); @Override public boolean isValid(String value, ConstraintValidatorContext context) { return sources.contains(value); } } @UserSource(message = "错误的用户来源!") private String source;
- 6)总结
- 日常开发中,大多都没有在数据库设置外键关系,而是用应用程序来维护,所以参数的校验是十分重要的,在程序保存记录前,可以使用validation来校验输入的参数,如果不满足规则,则抛出异常,避免存入脏数据。
-
ADI模拟对话杂志的合订本2013-2014.zip
2020-07-16 15:57:10设计人员常常只想到添加几个电容就可以解决大多数噪声问题,但却很少去考虑电容和电压额定值之外的参数。然而,与所有电子器件一样,电容并不是十全十美的,相反,电容会带来寄生等效串联电阻(ESR)和电感(ESL)的问题,其... -
基于AT89S52 单片的频率计
2010-01-04 08:47:37外部输入每个机器周期被采样一次,这样检测一次从1 到0 的跳变至少需要2 个机器周期(24 个振荡周期) ,所以最大计数速率为时钟频率 的1/24 (使用12MHz 时钟时,最大计数速率为500 KHz) 。定时/计数器的工作由 相应的... -
超级有影响力霸气的Java面试题大全文档
2012-07-18 09:47:04如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 18、error和exception有什么区别? error 表示恢复... -
VC++科学计算器的设计V1_4Beta.rar
2010-03-23 04:54:59预转换逆波兰表达式过程的作用是将源字符流转换成标准输入流的形式,同时还可以初步校验源输入表达式的有效性。生成逆波兰表达式过程是在预转换的基础上,最终生成便于为计算机识别与处理的中间临时代码。 计算逆... -
最全的oracle常用命令大全.txt
2011-12-09 08:41:00带初始化参数文件的启动方式 先读取参数文件,再按参数文件中的设置启动数据库 例:startup pfile=E:Oracleadminoradbpfileinit.ora 8、startup EXCLUSIVE 二、用户如何有效地利用数据字典 ORACLE的数据字典是... -
使用此方式,shell会自动对参数进行转化处理,目前支持二进制,八进制,十进制,十六进制整形,字符,字符串的自动处理,如果需要其他类型的参数,请使用代理参数解析的方式(参考代理函数和代理参数解析),或者使用...
-
shift键切换输入法,esc键隐藏输入法,空格选中第一个汉字,回车选中输入的拼音。和搜狗输入法处理一致。 英文、中文、数字字母、大小写、特殊字符自由切换。 支持单拼双拼词组输入,网上大部分只支持单个汉字输入。...
-
c语言编写单片机技巧
2009-04-19 12:15:17要实现单片机与电脑的连接,最简单的方式就是采用串口通讯,但需要加一颗RS-232芯片。 17. 在ARM编程中又应当如何? 答:就以嵌入式系统观念为例,一般嵌入式处理器可以分为三类:嵌入式微处理器、嵌入式微... -
精易模块[源码] V5.15
2015-03-21 22:03:372、改善“程序_禁止重复运行”添加是否显示已运行的参数,此命令由易友【@小爬虫】改进。 3、修正“网页_取网址引用”不支持Https和mms地址协议问题,感谢易友【@小爬虫】反馈。 4、修正“文件_改扩展名”当后缀名... -
疯狂HTML5+CSS3+JavaScript讲义-代码光盘(全)
2013-11-27 17:14:2513.2.1 定义变量的方式 13.2.2 类型转换 13.2.3 变量 13.3 基本数据类型 13.3.1 数值类型 13.3.2 字符串类型 13.3.3 布尔类型 13.3.4 undefined和null 13.3.5 正则表达式 13.4 复合类型 13.4.1 对象 ... -
Linux操作系统基础教程
2013-04-08 21:34:26要的是,Linux 上有公认的 C 语言世界最好的编译器 gcc,如果你想得到一个效率更高的开 发环境(并不一定是最友好的,但一定是最强大的),我建议你一定要好好的熟悉一下 Linux。 三.如何得到Linux? 据我所知... -
eas供应链dep案例集
2017-11-18 22:32:39输入第一行的流入预算项目的时候,后面的行自动携带第一行的值 0.5 单据操作控制修改 EASSCMA1P0062 应收单应付单数量单价精度设置 "应收/应付单录入界面;单据类型选择为非采购/销售发票的其他类型;在录入表体明细... -
NOD32ID生成器
2010-02-22 19:54:161、增加对ESET服务器检测功能,当校验的ESET服务器出错时会自动更换另外的ESET服务器,解决校验不停的问题。 1.6.9.1、1.6.9.2更新:2009-04-20 1、优化1.6.9.0部分用户检测不到网络的问题。 1.6.9.3更新:2009-04... -
芯片ADS1211资料
2009-08-17 14:58:41为了使系统的噪声对采样的影响达到最小,ADS1211差分输入的负端接到2.5V基准电压处。这是因为ADS1211的输入端的输入电压不能大于电源电压,且不能小于零。输入信号在-5V~+5V内变化时,通过计算可知AINP处的电压范围... -
Excel数据处理与分析实战技巧精粹 附书源码
2010-10-10 19:46:37技巧28 使用语音校验输入准确性 技巧29 神奇的选择性粘贴 技巧30 自动更正的妙用 技巧31 改变撤消的步数 技巧32 省心省力的重复操作 技巧33 灵活制作斜线表头 技巧34 单元格里也能换行 技巧35 Excel... -
c#学习笔记.txt
2008-12-15 14:01:21给定委托实例和适当的参数集,便可以用该参数集调用此委托实例的所有方法。委托实例的一个有趣和有用的属性是它不了解或不关心它所封装的方法的类;真正重要的只是方法要与委托的类型兼容, 这使委托非常适合“匿名”... -
WINRAR5.0正式注册版
2013-10-10 10:14:03对于RAR 5.0 压缩文件 rr[N]开关和rr[N]命令的参数总是视为压缩文件大小的百 分比,不管%字符是否存在。通常 N% 恢复记录可以修复 N%的连续损坏数据,增加压缩 文件的大小仅略超过 N%。解决多个损坏的能力与N成... -
Windows 系统错误代码简单分析
2010-04-14 11:21:570160 传到 DosExecPgm 的参数字符串错误。 0161 指定的路径无效。 0162 信号已挂起。 0164 系统无法创建其他线程。 0167 无法锁定文件的范围。 0170 所要求的资源正在使用中。 0173 锁定... -
Python Cookbook
2013-07-31 22:33:2610.3 以POP服务器的方式验证用户 375 10.4 统计Apache中每个IP的点击率 376 10.5 统计Apache的客户缓存的命中率 378 10.6 在脚本中调用编辑器 379 10.7 备份文件 381 10.8 选择性地复制邮箱文件 383 10.9 通过... -
java 面试题 总结
2009-09-16 08:45:34如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 15、error和exception有什么区别? error 表示恢复不是... -
Java经典入门教程pdf完整版
2020-09-03 17:00:26所有操作代码的参数类型将总是正确的 无非法数据转换发生,如将整数转换为对象引用 对象域访问是合法的 5:解释( Interpreter) 可是机器也不能认识clas文件,还需要被解释器进行解释,机器才能最终理解我们所 要表达的... -
Java Web开发实战1200例(第2卷)(完整版).(清华出版.卢瀚.王春斌).part1
2016-06-13 20:03:04实例300 使用$F()函数获取表单输入控件的值 实例301 使用Try.these()函数获取返回值 11.2 Prototype自定义对象和类 实例302 在HTML元素中增加CSS样式 实例303 利用Enumerable对象在页面中显示数组元素 实例304 使用... -
verilog语言PDF教程
2010-05-28 21:35:4110.6 结构描述方式和行为描述方式的 混合使用 106 10.7 层次路径名 107 10.8 共享任务和函数 108 10.9 值变转储文件 110 10.9.1 举例 111 10.9.2 VCD文件格式 112 10.10 指定程序块 113 10.11 强度 114 10.11.1 ... -
MYSQL中文手册
2013-03-11 21:21:341.8.6. MySQL处理约束的方式 2. 安装MySQL 2.1. 一般安装问题 2.1.1. MySQL支持的操作系统 2.1.2. 选择要安装的MySQL分发版 2.1.3. 怎样获得MySQL 2.1.4. 通过MD5校验和或GnuPG验证软件包的完整性 2.1.5. ... -
verilog基础教程
2009-10-25 11:42:1910.6 结构描述方式和行为描述方式的 混合使用 106 10.7 层次路径名 107 10.8 共享任务和函数 108 10.9 值变转储文件 110 10.9.1 举例 111 10.9.2 VCD文件格式 112 10.10 指定程序块 113 10.11 强度 114 10.11.1 ... -
Verilog教程.rar
2008-12-28 00:34:1910.6 结构描述方式和行为描述方式的 混合使用 106 10.7 层次路径名 107 10.8 共享任务和函数 108 10.9 值变转储文件 110 10.9.1 举例 111 10.9.2 VCD文件格式 112 10.10 指定程序块 113 10.11 强度 114 10.11.1 ... -
mysql官方中文参考手册
2009-04-11 11:59:181.8.6. MySQL处理约束的方式 2. 安装MySQL 2.1. 一般安装问题 2.1.1. MySQL支持的操作系统 2.1.2. 选择要安装的MySQL分发版 2.1.3. 怎样获得MySQL 2.1.4. 通过MD5校验和或GnuPG验证软件包的完整性 2.1.5. 安装布局 ... -
MySQL 5.1参考手册
2018-10-15 11:12:461.8.6. MySQL处理约束的方式 2. 安装MySQL 2.1. 一般安装问题 2.1.1. MySQL支持的操作系统 2.1.2. 选择要安装的MySQL分发版 2.1.3. 怎样获得MySQL 2.1.4. 通过MD5校验和或GnuPG验证软件包的完整性 2.1.5. 安装... -
winrar3.7 Beta8
2007-07-07 00:17:02<br> -d<路径> 设置目标路径 -p<密码> 指定一个密码 -s 缄默安装, 全部隐藏 -s1 和 -s 相同 -s2 缄默模式, 隐藏启动对话框 -sp<参数> 指定安装程序的参数 <br> 6. GUI 自解压模块不像...
收藏数
48
精华内容
19
-
CSP201604-1折点计数(C++100分)
-
Galera 高可用 MySQL 集群(PXC v5.7+Hapro)
-
LeetCode.304 二维区域和检索 - 矩阵不可变
-
docker菜鸟学习笔记之ubuntu容器中安装python3和卸载python2
-
AppScan 10.0.4.zip
-
MySQL 数据类型和运算符
-
Dockerflie:tf-nightly-gpu-docker-cuda11.1
-
第一次云服务器部署
-
FFmpeg4.3系列之16:WebRTC之小白入门与视频聊天的实战
-
MySQL 数据库的基本操作(数据完整性约束)
-
Day2-运算符和变量作业
-
UVA839 天平 Not so Mobile
-
基于微信的同城小程序、校园二手交易小程序 毕业设计毕设源码使用教程
-
Java从入门到放弃篇7(for循环,while(true)死循环,if语句,创建方法,方法调用,实现图形)
-
弘阳地产高管再变动:曾俊凯进、张良等人退,对千亿规模避而不提
-
命题人讲座_代数不等式.pdf
-
MySQL 高可用工具 heartbeat 实战部署详解
-
Python基于Flask人力资源管理系统设计
-
【链表】:输入一个链表,输出该链表中倒数第k个结点。
-
实现 MySQL 读写分离的利器 mysql-proxy