hibernate validator【原】
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.*) |
|
|
被注释的元素必须是电子邮箱地址 |
|
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集成 等)
Spring MVC 数据校验@Valid--https//www.cnblogs.com/happyflyingpig/p/8022881.html
参考链接
java使用validator进行校验--https://blog.csdn.net/dream_broken/article/details/53584169
hibernate validator【原】的更多相关文章
- 解决Hibernate validator抛出Ljavax/validation/ParameterNameProvider异常方法
最近升级CAS Client4.0客户端Spring版本至Spring4.*以上,升级整合hibernate框架时,Hibernate validator 4.3.0.Final使用版本(从Hiber ...
- Hibernate Validator验证标签说明
Hibernate Validator是JSR-303的一个实现. 在FormBean里添加Hibernate Validator的注解,与定义一个校验类的做法相比.注解更加简洁.灵活. Bean V ...
- 非WEB项目中引入Hibernate Validator
前言: 网上一些朋友分享了关于hibernate-validator的使用方法,但是不是缺少关联库信息,就是提供的参考代码中缺少自定类. 希望我这一篇博客能够让你顺利的跑出预期的结果. 如果有错,可以 ...
- Hibernate Validator
http://docs.jboss.org/hibernate/validator/4.2/reference/zh-CN/html_single/#example-group-interfaces
- 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 ...
- Hibernate validator验证
spring-mvc配置 <mvc:annotation-driven validator="validator" /> <bean id="valid ...
- springMvc 支持hibernate validator
SpringMVC 支持Hibernate Validator 发表于9个月前(2014-08-04 11:34) 阅读(1780) | 评论(0) 11人收藏此文章, 我要收藏 赞0 5月23日 ...
- SpringMVC利用Hibernate validator做字段验证
1.添加Hiberbate validator相关的jar包 2.字需要验证的formbean 上添加验证的注解,内置注解有: dBean Validation 中内置的 constraint @Nu ...
- JSR303的数据校验-Hibernate Validator方式实现
1.什么是JSR303? JSR303是java为bean数据合法性校验所提供的一个标准规范,叫做Bean Validation. Bean Validation是一个运行时的数据校验框架,在验证之后 ...
随机推荐
- Django+Vue打造购物网站(二)
配置后台管理 xadmin直接使用之前的在线教育的那个就可以了 users/adminx.py #!/usr/bin/env python # -*- coding: utf-8 -*- # @Tim ...
- Verilog定义计算位宽的函数clogb2
在很多情况下要计算输入输出的位宽,比如你写一个8*8的ram,那么地址需要三位去表示,那么这个函数的方便就体现出来了,你需要使用函数定义就好了,如果对于多文件可以包含定义的文件: 如果你的DEPTH是 ...
- ZOJ 3846 GCD Reduce//水啊水啊水啊水
GCD Reduce Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge You are given a sequ ...
- Shiro中的Remember me设置
1. 在Spring的相关配置文件中加入如下Remember me管理器配置: <!-- rememberMe管理器 --> <bean id="rememberMeMan ...
- express搭建服务器
学习express搭建node服务器 一.安装express框架 1.了解框架(百度) 2.下载框架 (1)使用npm命令下载 npm install express -g //全局安装,安装的是ex ...
- Vue--组件嵌套
1.全局注册: 组件放到components文件夹内,建议组件名是什么行为的name名就是什么 main.js 引入组件:import Users from '组件位置' 注册全局组件:Vue.com ...
- 洛谷P3338 力
题意: 解: 介绍两种方法. 首先可以把那个最后除的qi拆掉. ①分前后两部分处理. 前一部分可以看做是个卷积.下面的平方不拆开,直接看成gi-j即可. 后一部分按照套路,把循环变量改成从0开始,反转 ...
- bzoj4842 Delight for a Cat
题意:n天内你每天可以s或者e,分别有一定的收益. 每连续k天中s的天数要大于ds,e的天数要大于de,求最大收益. 解:费用流解线性规划. 先假设全部选e,然后一天s的收益为si - ei ai表示 ...
- git的使用命令
git archive --format zip --output "./test.zip" master -0 将项目的代码通过上述命令打包压缩为test文件夹 ssh-keyg ...
- 原生js实现each方法
首先我们了解一下什么是callback函数 CALLBACK,即回调函数,是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就 ...