hibernate validator 功能

在开发中经常做一些字段校验的功能,比如非空,长度限制,邮箱验证等等,为了省掉这种冗长繁琐的操作,hibernate validator提供了一套精简的注释方案以实现这些基本校验。

注解说明

Annotation Type

Description   (import javax.validation.constraints.*)

AssertFalse

被注释的元素必须为boolean,且为false

AssertTrue

被注释的元素必须为boolean,且为true

DecimalMax

被注释的元素必须为数字,且小于等于最大值

DecimalMin

被注释的元素必须为数字,且大于等于最小值

Digits

被注释的元素必须为数字,且精度在指定的整数和小数范围内

Future

被注释的元素必须为日期且大于当前时间(是未来的时间)

Max

被注释的元素必须是数字,且小于等于最大值

Min

被注释的元素必须是数字,且大于等于最小值

NotNull

被注释的元素必须不为 null

Null

被注释的元素必须为 null

Past

被注释的元素必须为日期且小于当前时间(是过去的时间)

Pattern

被注释的元素必须字符串,且符合指定正则表达式,如果为null则不校验

Size

被注释的元素必须是字符串,长度大于等于min值,小于等于max值

Annotation Type

Description   (import org.hibernate.validator.constraints.*)

Email

被注释的元素必须是电子邮箱地址

Length

被注释的字符串的大小必须在指定的范围内

NotBlank

被注释的字符串必须非空

NotEmpty

被注释的字符串或列表的必须非空

Range

被注释的元素必须在合适的范围内

URL

被注释的字符串的必须符合url地址格式

使用样例

工具类ValidationTool.java

package hibernate.validator;
import java.util.Set; import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.ValidationException;
import javax.validation.Validator;
import javax.validation.ValidatorFactory; /**
* HibernateValidator工具
* @author King
*
*/
public class ValidationTool { private static Validator validator; static {
ValidatorFactory vf = Validation.buildDefaultValidatorFactory();
validator = vf.getValidator();
} public static <T> void validate(T t) throws ValidationException {
Set<ConstraintViolation<T>> set = validator.validate(t);
if (set.size() > 0) {
StringBuilder errorBuilder = new StringBuilder();
for (ConstraintViolation<T> val : set) {
errorBuilder.append(val.getMessage() + ";");
}
throw new ValidationException(errorBuilder.toString());
}
}
}

学生类Student.java

package hibernate.validator;

import java.util.Date;

import javax.validation.constraints.AssertTrue;
import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Digits;
import javax.validation.constraints.Future;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size; import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.Range;
import org.hibernate.validator.constraints.URL; /**
* 学生类
*
* @author King
*/
public class Student { @AssertTrue(message = "必须为女孩")
// @AssertFalse(message = "必须为男孩")
Boolean girlFlag; // 以下三者酌情取其一
// 仅针对String,含空白字符的String也是不符合规则的,如" \t "也是不规范的
@NotBlank(message = "名字不能为空")
// 不能为null或者长度为0,可以应用于String类、Collection、Map、数组,(String、Collection、Map的isEmpty()方法)
@NotEmpty(message = "名字不能为空")
// 不能为null
@NotNull(message = "名字不能为空")
String name; @Min(value = 1, message = "年龄不得小于1岁")
@Max(value = 200, message = "年龄不得大于200岁")
Integer age; @Digits(integer = 2, fraction = 2, message = "身高精度为XX.XX米")
Double height; @DecimalMin(value = "3.0", message = "最轻为3.0斤")
@DecimalMax(value = "300.0", message = "最重为300.0斤")
Double weight; // 如果是null则不校验,如果不是null,则校验
@Pattern(regexp = "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", message = "出生日期格式yyyy-MM-dd不正确")
String birthDateStr; // 如果是null则不校验,如果不是null,则校验
@Pattern(regexp = "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$", message = "数学考试开始时间格式yyyy-MM-dd HH:mm:ss不正确")
String mathExamTime; @Past(message = "出生日期应为过去时间")
Date birthDate; @Future(message = "毕业时间应为将来时间")
Date graduateDate; @Size(min = 2, max = 20, message = "地址长度必须介于2到20之间")
String address; @Email(message = "邮件格式不合法")
String email; @Length(min = 1, max = 100, message = "兴趣爱好介绍长度必须介于1到100之间")
String hobby; @URL(message = "链接地址不是合法的url")
String link; @Range(min = 0, max = 10, message = "兄弟个数介于0到10个字符之间")
int brotherNumber; String other; // /////////////////////// public static void main(String[] args) {
StudentTest.main(null);
} public int getBrotherNumber() {
return brotherNumber;
} public void setBrotherNumber(int brotherNumber) {
this.brotherNumber = brotherNumber;
} public Boolean getGirlFlag() {
return girlFlag;
} public void setGirlFlag(Boolean girlFlag) {
this.girlFlag = girlFlag;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public Double getHeight() {
return height;
} public void setHeight(Double height) {
this.height = height;
} public Double getWeight() {
return weight;
} public void setWeight(Double weight) {
this.weight = weight;
} public String getBirthDateStr() {
return birthDateStr;
} public void setBirthDateStr(String birthDateStr) {
this.birthDateStr = birthDateStr;
} public String getMathExamTime() {
return mathExamTime;
} public void setMathExamTime(String mathExamTime) {
this.mathExamTime = mathExamTime;
} public Date getBirthDate() {
return birthDate;
} public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
} public Date getGraduateDate() {
return graduateDate;
} public void setGraduateDate(Date graduateDate) {
this.graduateDate = graduateDate;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} public String getHobby() {
return hobby;
} public void setHobby(String hobby) {
this.hobby = hobby;
} public String getLink() {
return link;
} public void setLink(String link) {
this.link = link;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} public String getOther() {
return other;
} public void setOther(String other) {
this.other = other;
}
}

学生测试类

package hibernate.validator;

import java.util.Date;

import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory; import org.junit.BeforeClass; import com.isoftstone.pcis.util.ValidationTool; public class StudentTest {
private static Validator validator; /**
* 生成validator校验器
*/
@BeforeClass
public static void setUpValidator() {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
} /**
* 验证整个Student
*/ // @Test
// public void test() { public static void main(String[] args) {
Student stu = new Student(); stu.setGirlFlag(true);
stu.setName("Pricess");
stu.setAge(18);
stu.setHeight(1.78d);
stu.setWeight(120.0);
stu.setBirthDateStr("2001-01-06");
stu.setMathExamTime("2018-07-08 09:00:00");
stu.setBirthDate(new Date(System.currentTimeMillis() - 10000));
stu.setGraduateDate(new Date(System.currentTimeMillis() + 100000));
stu.setAddress("浙江杭州");
stu.setEmail("12345 qq.com");//故意不加@,以验证异常效果
stu.setHobby("音乐");
stu.setLink("http://www.cnblogs.com/whatlonelytear/");
stu.setBrotherNumber(1); ValidationTool.validate(stu); } }

运行console打印语句

Exception in thread "main" javax.validation.ValidationException: 邮件格式不合法;
at com.isoftstone.pcis.util.ValidationTool.validate(ValidationTool.java:)
at hibernate.validator.StudentTest.main(StudentTest.java:)

进阶知识

以上hibernate的基本使用已完全可以满足日常需要, 如果有更进一步的规则, 可以参考以下链接(内含自定义规则 spring集成 等)

Hibernate validator使用和自定义validator及整合Spring MVC--https://blog.csdn.net/xulianboblog/article/details/51694924

Spring MVC 数据校验@Valid--https//www.cnblogs.com/happyflyingpig/p/8022881.html

参考链接

java使用validator进行校验--https://blog.csdn.net/dream_broken/article/details/53584169

hibernate validator【原】的更多相关文章

  1. 解决Hibernate validator抛出Ljavax/validation/ParameterNameProvider异常方法

    最近升级CAS Client4.0客户端Spring版本至Spring4.*以上,升级整合hibernate框架时,Hibernate validator 4.3.0.Final使用版本(从Hiber ...

  2. Hibernate Validator验证标签说明

    Hibernate Validator是JSR-303的一个实现. 在FormBean里添加Hibernate Validator的注解,与定义一个校验类的做法相比.注解更加简洁.灵活. Bean V ...

  3. 非WEB项目中引入Hibernate Validator

    前言: 网上一些朋友分享了关于hibernate-validator的使用方法,但是不是缺少关联库信息,就是提供的参考代码中缺少自定类. 希望我这一篇博客能够让你顺利的跑出预期的结果. 如果有错,可以 ...

  4. Hibernate Validator

    http://docs.jboss.org/hibernate/validator/4.2/reference/zh-CN/html_single/#example-group-interfaces

  5. spring boot 1.4默认使用 hibernate validator

    spring boot 1.4默认使用 hibernate validator 5.2.4 Final实现校验功能.hibernate validator 5.2.4 Final是JSR 349 Be ...

  6. Hibernate validator验证

    spring-mvc配置 <mvc:annotation-driven validator="validator" /> <bean id="valid ...

  7. springMvc 支持hibernate validator

    SpringMVC 支持Hibernate Validator 发表于9个月前(2014-08-04 11:34)   阅读(1780) | 评论(0) 11人收藏此文章, 我要收藏 赞0 5月23日 ...

  8. SpringMVC利用Hibernate validator做字段验证

    1.添加Hiberbate validator相关的jar包 2.字需要验证的formbean 上添加验证的注解,内置注解有: dBean Validation 中内置的 constraint @Nu ...

  9. JSR303的数据校验-Hibernate Validator方式实现

    1.什么是JSR303? JSR303是java为bean数据合法性校验所提供的一个标准规范,叫做Bean Validation. Bean Validation是一个运行时的数据校验框架,在验证之后 ...

随机推荐

  1. MT【258】椭圆第三定义

    如图,已知椭圆方程为$\dfrac{x^2}{4}+\dfrac{y^2}{3}=1$$A$为椭圆上一点,$AF_1,AF_2$与椭圆交于$B,C$两点,$A_1B,A_2C$交于一点$M$.当$A$ ...

  2. 图论杂项细节梳理&模板(虚树,圆方树,仙人掌,欧拉路径,还有。。。)

    orzYCB 虚树 %自为风月马前卒巨佬% 用于优化一类树形DP问题. 当状态转移只和树中的某些关键点有关的时候,我们把这些点和它们两两之间的LCA弄出来,以点的祖孙关系连成一棵新的树,这就是虚树. ...

  3. 【转】linux清屏的几种方法

    在windows的DOS操作界面里面,清屏的命令是cls,那么在linux 里面的清屏命令是什么呢?下面笔者分享几种在linux下用过的清屏方法. 1.clear命令.这个命令将会刷新屏幕,本质上只是 ...

  4. BZOJ2406矩阵

    题目描述 题解 最大值最小,一眼二分没的说. 然后考虑建出这么个图,每行看做一个点,每列看做一个点,每个点看做一条连接行与列的边,源点向每行连s-mid__s+mid的边,行与列连L__R的边,列到汇 ...

  5. [HNOI2007]梦幻岛宝珠(背包)

    给你N颗宝石,每颗宝石都有重量和价值.要你从这些宝石中选取一些宝石,保证总重量不超过W,且总价值最大为,并输出最大的总价值.数据范围:N<=100;W<=2^30,并且保证每颗宝石的重量符 ...

  6. A.01.01—模块的输入—低端输入

    汽车电子模块的输入一般包含数字量低端输入.数字量高端输入.模拟量输入.脉宽调制输入.总线信号输入.脉冲信号输入,对于无线信号输入和视频信号音频信号我们不做讨论. 数字量低端输入是应用最为广泛的一种输入 ...

  7. poj 3080 Blue Jeans (暴力枚举子串+kmp)

    Description The Genographic Project is a research partnership between IBM and The National Geographi ...

  8. [WC2019] 数树

    [WC2019] 数树 Zhang_RQ题解(本篇仅概述) 前言 有进步,只做了半天.... 一道具有极强综合性的数数好题! 强大的多合一题目 精确地数学推导和耐心. 有套路又不失心意. 融合了: 算 ...

  9. 【CF1119E】Pavel and Triangles

    题目大意:有 N 种长度的边,第 i 种长度为 \(2^i\),给定一些数量的这些边,问最多可以组合出多少种三角形. 题解:应该是用贪心求解,不过选择什么样的贪心策略很关键. 首先分析可知,两个较大边 ...

  10. python面向对象编程 -- 基本概念

    面向对象的编程简要概括就是将要处理的问题抽象为数据和操作的集合,用类对其进行封装.其中数据和操作都称为类的属性,它们是一般是不变的. 对类进行实例化生成我们所说的对象,对象有自己的属性.对象的属性一般 ...