一、JSR-303简介

JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Validator。

此实现与 Hibernate ORM 没有任何关系。 JSR 303 用于对 Java Bean 中的字段的值进行验证。

Spring MVC 3.x 之中也大力支持 JSR-303,可以在控制器中对表单提交的数据方便地验证。

注:可以使用注解的方式进行验证

二、准备校验时使用的JAR

validation-api-1.0.0.GA.jar:JDK的接口;

hibernate-validator-4.2.0.Final.jar是对上述接口的实现;

log4j、slf4j、slf4j-log4j

三、JSR 303 基本的校验规则

空检查

@Null 验证对象是否为null

@NotNull 验证对象是否不为null, 无法查检长度为0的字符串

@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.

@NotEmpty 检查约束元素是否为NULL或者是EMPTY.

Booelan检查

@AssertTrue 验证 Boolean 对象是否为 true

@AssertFalse 验证 Boolean 对象是否为 false

长度检查

@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内

@Length(min=, max=) Validates that the annotated string is between min and max included.

日期检查

@Past 验证 Date 和 Calendar 对象是否在当前时间之前,验证成立的话被注释的元素一定是一个过去的日期

@Future 验证 Date 和 Calendar 对象是否在当前时间之后 ,验证成立的话被注释的元素一定是一个将来的日期

@Pattern 验证 String 对象是否符合正则表达式的规则,被注释的元素符合制定的正则表达式,regexp:正则表达式 flags: 指定 Pattern.Flag 的数组,表示正则表达式的相关选项。

数值检查

建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为Stirng为”“,Integer为null

@Min 验证 Number 和 String 对象是否大等于指定的值

@Max 验证 Number 和 String 对象是否小等于指定的值

@DecimalMax 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度

@DecimalMin 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度

@Digits 验证 Number 和 String 的构成是否合法

@Digits(integer=,fraction=) 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。

@Range(min=, max=) 被指定的元素必须在合适的范围内

@Range(min=10000,max=50000,message=”range.bean.wage”)

@Valid 递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证)

@CreditCardNumber信用卡验证

@Email 验证是否是邮件地址,如果为null,不进行验证,算通过验证。

@ScriptAssert(lang= ,script=, alias=)

@URL(protocol=,host=, port=,regexp=, flags=)

四、案例分析

在使用的时候直接对JavaBean进行注解既可以实现对属性的验证

public class Order {

// 必须不为 null, 大小是 10

@NotNull

@Size(min = 10, max = 10)

private String orderId;

// 必须不为空

@NotEmpty

private String customer;

// 必须是一个电子信箱地址

@Email

private String email;

// 必须不为空

@NotEmpty

private String address;

// 必须不为 null, 必须是下面四个字符串'created', 'paid', 'shipped', 'closed'其中之一

// @Status 是一个定制化的 contraint

@NotNull

@Status

private String status;

// 必须不为 null

@NotNull

private Date createDate;

// 嵌套验证

@Valid

private Product product;

// getter 和setter方法

}

又例:

@NotNull(message = "adultTax不能为空")

private Integer adultTax;

@NotNull(message = "adultTaxType不能为空")

@Min(value = 0, message = "adultTaxType 的最小值为0")

@Max(value = 1, message = "adultTaxType 的最大值为1")

private Integer adultTaxType;

@NotNull(message = "reason信息不可以为空")

@Pattern(regexp = "[1-7]{1}", message = "reason的类型值为1-7中的一个类型")

private String reason;//订单取消原因

五、下边是一个完整的例子:

public class ValidateTestClass{

@NotNull(message = "reason信息不可以为空")

@Pattern(regexp = "[1-7]{1}", message = "reason的类型值为1-7中的一个类型")

private String reason;//订单取消原因

//get、set方法、有参构造方法、无参构造方法、toString方法省略

/**

* 验证参数:就是验证上述注解的完整方法

* @return

*/

public void validateParams() {

//调用JSR303验证工具,校验参数

Validator validator = Validation.buildDefaultValidatorFactory().getValidator();

Set> violations = validator.validate(this);

Iterator> iter = violations.iterator();

if (iter.hasNext()) {

String errMessage = iter.next().getMessage();

throw new ValidationException(errMessage);

}

}

}

我们可以写一个测试类进行验证:

public class ValidateTestClassValidateTest{

@Test

public void validateParam(){

ValidateTestClass validateTestClass = new ValidateTestClass();

validateTestClass .setReason(12);

validateTestClass .validateParams(); //调用验证的方法

}

}

ok!这样就可以进行测试。

并且我们在使用的时候一定要注意,对于某一种验证规则是适用于一种数据类型的,简单说来,正则则表达式的验证对象可以为String类型的,但是不可以为Integer类型的数据,那么当我们使用正则表达式进行验证的时候就会出现错误。

类似于:

javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.lang.Integer.

at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.verifyResolveWasUnique(ConstraintValidatorManager.java:218)

意思就是你这个验证的注解不应该对该类型进行注解。

https://blog.csdn.net/qq_28867949/article/details/78922520

jsr 正则验证_JSR-303 数据校验学习相关推荐

  1. JSR-303 数据校验学习

    @ConfigurationProperties标识的类支持JSR-303校验 JSR 303 - Bean Validation 介绍及最佳实践 一.JSR-303简介 JSR-303 是 JAVA ...

  2. php 检测英文字符,php正则验证中英文字符串 - 小俊学习网

    php正则验证字符,判断是否为中英文.在js中,要判断字符串是中文是很简单的.如: var str = "php哈哈"; if (/^[\u4e00-\u9fa5]+$/.test ...

  3. jsr 正则验证_Java数据校验(Bean Validation / JSR303)

    #简介 JSR303是JAVA EE6中的子规范.用于对Java Bean的字段值进行校验,确保输入进来的数据在语义上是正确的,使验证逻辑从业务代码中脱离出来.JSR303是运行时数据验证框架,验证之 ...

  4. jsr 正则验证_使用 Bean Validation 解决业务中参数校验

    痛点及现状 代码中常常见到如下代码: if (Objects.equal(0L ,repertory)){ return ApiResultMap.errorResult(-1 ,"操作数量 ...

  5. jsr 正则验证_使用JSR-303进行校验 @Valid

    一.在SringMVC中使用 使用注解 1.准备校验时使用的JAR validation-api-1.0.0.GA.jar:JDK的接口: hibernate-validator-4.2.0.Fina ...

  6. jsr 正则验证_JSR303 验证

    www.cqdyr.com JSR303 验证 JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation ,官方参 考实现是 Hibernate Validator ...

  7. 如何使用JSR 303 进行后台数据校验?

    文章目录 一.JSR 303 1.什么是 JSR 303? 2.为什么使用 JSR 303? 3.JSR 303 常见操作? 二.使用 JSR 303 相关注解处理逻辑 1.JSR 303 注解处理逻 ...

  8. validated 验证数组_Spring Boot 快速入门系列(VIII)—— 数据校验篇之 @Valid @Validated...

    点击上方蓝色字体关注我吧 一起学习,一起进步,做积极的人! 场景描述: 你还在业务代码或是控制层中校验接口传入参数的有效性和合法性吗?还是只做了前端参数校验,后端接口直接放行?这样的话,程序运行的正确 ...

  9. java学习笔记——springmvc 之 数据自定义转换器 数据格式化 JSR303数据校验返回与接收JSON(@RequestBody 和 @ResponseBody)

    九.数据绑定流程分析 1.提出问题 日期字符串格式的表单参数,提交后转换为Date类型 <!--    解决问题: 1.数据类型转换 2.数据格式 3.数据校验 --> BirthDay ...

最新文章

  1. 实例讲解Linux系统中硬链接与软链接的创建
  2. 开启灯光就是近光吗_摩托车灯光你用对了吗?双闪的作用是什么?
  3. PCL点云库实现点云表面的法线与曲率计算并可视化
  4. C++之全局函数和成员函数互相转换
  5. 浮点加减运算之0舍1入法与恒置1法
  6. 阿卡接口_阿卡vs风暴
  7. DIY Ruby CPU 分析 Part II
  8. java根据sessionid获取session
  9. loadrunner取出字符串的后面几位
  10. 微服务 雪崩效应 与 Hystrix 断路器使用入门
  11. DSkin的DSkinDataGridView控件滚动条拖动后位置不变
  12. 商业数据分析从入门到入职(1)商业数据分析综述
  13. 随着XAG加密圈影响力不断增强,吸引全球最大行情站点CMC收录瑞波基因XAG
  14. 我的世界服务器方块高度修改,我的世界:Mojang解除建筑高度限制,最高可达2032格,玩家狂喜!...
  15. mysql白名单ip通配符
  16. 回顾苹果操作系统Mac OS的发展历史
  17. 电信传输_第六章_光纤接入网
  18. JavaScript 面试题(二十)延时器
  19. GitHub客户端的基本操作
  20. 佛说.今生娶你的人,就是前世埋葬你的人

热门文章

  1. Capital One银行数据泄漏事件分析
  2. modelsim编译Xilinx器件库
  3. Matlab玩出新高度,变身表白女孩神器
  4. 4-20mA、0-5v模拟信号隔离器(光电)、安全栅、0-10v信号变送器
  5. c语言1到200能被4整除,c语言求[100,200]之间能被4整除,不能被5整除的数之和
  6. oracle-数据库表-术语
  7. catfish CMS访问sitemap.xml出现404错误
  8. iphone 5 5s 6 6s 6plus开发
  9. JS----多个Echarts resize方法,只有一个图表自适应生效
  10. 无限个无穷小乘积不一定是无穷小(举反例)