精华内容
下载资源
问答
  • Bean 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来校验输入的参数,如果不满足规则,则抛出异常,避免存入脏数据。
      在这里插入图片描述
    展开全文
  • 设计人员常常只想到添加几个电容就可以解决大多数噪声问题,但却很少去考虑电容和电压额定值之外的参数。然而,与所有电子器件一样,电容并不是十全十美的,相反,电容会带来寄生等效串联电阻(ESR)和电感(ESL)的问题,其...
  • 外部输入每个机器周期被采样一次,这样检测一次从1 到0 跳变至少需要2 个机器周期(24 个振荡周期) ,所以最大计数速率为时钟频率 1/24 (使用12MHz 时钟时,最大计数速率为500 KHz) 。定时/计数器工作由 相应...
  • 如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 18、error和exception有什么区别?  error 表示恢复...
  • 预转换逆波兰表达式过程作用是将源字符流转换成标准输入形式,同时还可以初步校验输入表达式有效性。生成逆波兰表达式过程是在预转换基础上,最终生成便于为计算机识别与处理中间临时代码。 计算逆...
  • 带初始化参数文件启动方式 先读取参数文件,再按参数文件中设置启动数据库 例: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:37
    2、改善“程序_禁止重复运行”添加是否显示已运行的参数,此命令由易友【@小爬虫】改进。 3、修正“网页_取网址引用”不支持Https和mms地址协议问题,感谢易友【@小爬虫】反馈。 4、修正“文件_改扩展名”当后缀名...
  • 13.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 上有公认 C 语言世界最好编译器 gcc,如果你想得到一个效率更高开 发环境(并不一定是最友好,但一定是最强大),我建议你一定要好好熟悉一下 Linux。 三.如何得到Linux? 据我所知...
  • eas供应链dep案例集

    2017-11-18 22:32:39
    输入第一行流入预算项目时候,后面行自动携带第一行值 0.5 单据操作控制修改 EASSCMA1P0062 应收单应付单数量单价精度设置 "应收/应付单录入界面;单据类型选择为非采购/销售发票其他类型;在录入表体明细...
  • NOD32ID生成器

    2010-02-22 19:54:16
    1、增加对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处的电压范围...
  • 技巧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成...
  •  0160 传到 DosExecPgm 的参数字符串错误。  0161 指定的路径无效。  0162 信号已挂起。  0164 系统无法创建其他线程。  0167 无法锁定文件的范围。  0170 所要求的资源正在使用中。  0173 锁定...
  • Python Cookbook

    2013-07-31 22:33:26
    10.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 表示恢复不是...
  • 所有操作代码的参数类型将总是正确的 无非法数据转换发生,如将整数转换为对象引用 对象域访问是合法的 5:解释( Interpreter) 可是机器也不能认识clas文件,还需要被解释器进行解释,机器才能最终理解我们所 要表达的...
  • 实例300 使用$F()函数获取表单输入控件值 实例301 使用Try.these()函数获取返回值 11.2 Prototype自定义对象和类 实例302 在HTML元素中增加CSS样式 实例303 利用Enumerable对象在页面中显示数组元素 实例304 使用...
  • verilog语言PDF教程

    热门讨论 2010-05-28 21:35:41
    10.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:34
    1.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:19
    10.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:19
    10.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 ...
  • 1.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:46
    1.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 自解压模块不像...

空空如也

空空如也

1 2 3
收藏数 48
精华内容 19
关键字:

外部输入的参数校验的方式