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. [SP1043] GSS1 - Can you answer these queries I

    传送门:>Here< 题意:求区间最大子段和 $N \leq 50000$ 包括多组询问(不需要支持修改) 解题思路 线段树的一道好题 我们可以考虑,如果一组数据全部都是正数,那么问题等同 ...

  2. SpringMVC 集成Log4j

    项目地址:https://github.com/xiaoqiu-duan/DataProject.git 1.添加jar <dependency> <groupId>org.s ...

  3. 【XSY2732】Decalcomania 可持久化线段树 分治

    题目描述 有一个陶瓷瓶周围有\(n\)个可以印花的位置.第\(i\)个与第\(i+1\)个位置之间的距离为\(d_i\),在第\(i\)个位置印图案要\(t_i\)秒. 机器刚开始在\(0\)号位置, ...

  4. XAMPP Access forbidden! Error 403,You don't have permission to access the requested directory

    xampp 无论在window 还是在 Mac 如出现以下错误的:通常的解决方式: 具体配置教程可以任意查相关资料既可,(配置子站子大致流程如:开启httpd.conf的inc...httpd-vho ...

  5. Leetcode 215. 数组中的第K个最大元素 By Python

    在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 ...

  6. Luogu P4774 / LOJ2721 【[NOI2018]屠龙勇士】

    真是个简单坑题...++ 前置: exgcd,exCRT,STL-multiset 读完题不难发现,攻击每条龙用的剑都是可以确定的,可以用multiset求.攻击最少显然应该对于每一条龙都操作一次,即 ...

  7. ssh-key 与 git账户配置以及多账户配置,以及通信方式从https切换到ssh

    参考:http://www.cnblogs.com/dubaokun/p/3550870.html 在使用git的时候,git与远程服务器是一般通过ssh传输的(也支持ftp,https),我们在管理 ...

  8. 小白眼中的AI之~Numpy基础

      周末码一文,明天见矩阵- 其实Numpy之类的单讲特别没意思,但不稍微说下后面说实际应用又不行,所以大家就练练手吧 代码裤子: https://github.com/lotapp/BaseCode ...

  9. InnoDB,5项最佳实践,知其所以然?

    InnoDB,5项最佳实践,知其所以然? 原创: 58沈剑 架构师之路 昨天 缓存讲了一个月<缓存架构,一篇足够>.今天,开始写数据库. 第一篇,说说MySQL两个最常用的存储引擎,MyI ...

  10. .net 调用 网易云的短信验证

    static string url = "https://api.netease.im/sms/sendcode.action"; static string appKey = & ...