hibernate validation内置注解及自定义注解详解编程语言

 1 Bean Validation 中内置的 constraint          
 2 @Null   被注释的元素必须为 null     
 3 @NotNull    被注释的元素必须不为 null     
 4 @AssertTrue     被注释的元素必须为 true     
 5 @AssertFalse    被注释的元素必须为 false     
 6 @Min(value)     被注释的元素必须是一个数字,其值必须大于等于指定的最小值     
 7 @Max(value)     被注释的元素必须是一个数字,其值必须小于等于指定的最大值     
 8 @DecimalMin(value)  被注释的元素必须是一个数字,其值必须大于等于指定的最小值     
 9 @DecimalMax(value)  被注释的元素必须是一个数字,其值必须小于等于指定的最大值     
10 @Size(max=, min=)   被注释的元素的大小必须在指定的范围内     
11 @Digits (integer, fraction)     被注释的元素必须是一个数字,其值必须在可接受的范围内     
12 @Past   被注释的元素必须是一个过去的日期     
13 @Future     被注释的元素必须是一个将来的日期     
14 @Pattern(regex=,flag=)  被注释的元素必须符合指定的正则表达式     
15      
16 Hibernate Validator 附加的 constraint     
17 @NotBlank(message =)   验证字符串非null,且长度必须大于0     
18 @Email  被注释的元素必须是电子邮箱地址     
19 @Length(min=,max=)  被注释的字符串的大小必须在指定的范围内     
20 @NotEmpty   被注释的字符串的必须非空     
21 @Range(min=,max=,message=)  被注释的元素必须在合适的范围内

自定义注解:

Employee.java 
package org.lxl.spring.form.model; 
public class Employee { 
private int id; 
private String name; 
private String role; 
public int getId() { 
return id; 
} 
public void setId(int id) { 
this.id = id; 
} 
public String getName() { 
return name; 
} 
public void setName(String name) { 
this.name = name; 
} 
public String getRole() { 
return role; 
} 
public void setRole(String role) { 
this.role = role; 
} 
} 
Employee是一个标准的java bean,我们使用Validate接口的实现类来验证这个类。 
自定义验证实现 
Phone.java 
package org.lxl.spring.form.validator; 
import java.lang.annotation.Documented; 
import java.lang.annotation.Retention; 
import java.lang.annotation.Target; 
import java.lang.annotation.ElementType; 
import java.lang.annotation.RetentionPolicy; 
import javax.validation.Constraint; 
import javax.validation.Payload; 
@Documented 
@Constraint(validatedBy = PhoneValidator.class) 
@Target({ElementType.METHOD,ElementType.FIELD}) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface Phone { 
String message() default "{Phone}"; 
Class<?>[] groups() default {}; 
Class<? extends Payload>[] payload() default {}; 
} 
大多数的部分是样板式代码与jsr - [email protected],我们提供的类即PhoneValidator将用于验证。 
PhoneValidator.java 
package org.lxl.spring.form.validator; 
import javax.validation.ConstraintValidator; 
import javax.validation.ConstraintValidatorContext; 
public class PhoneValidator implements ConstraintValidator<Phone,String> { 
@Override 
public void initialize(Phone paramA) { 
} 
@Override 
public boolean isValid(String phoneNo, ConstraintValidatorContext ctx) { 
if(phoneNo == null){ 
return false; 
} 
//validate phone numbers of format "1234567890" 
if(phoneNo.matches("//d{10}")) return true; 
//validate phone number with -, . or spaces 
else if(phoneNo.matches("//d{3}[-//.//s]//d{3}[-//.//s]//d{4}}")) return true; 
//validating phone number with extension length from 3 to 5 
else if(phoneNo.matches("//d{3}-//d{3}-//d{4}//s(x|(ext))//d{3,5}")) return true; 
//validating phone number where area code is in braces() 
else if(phoneNo.matches("//(//d{3}//)-//d{3}-//d{4}")) return true; 
//return false if nothing matches the input 
else return false; 
} 
} 
我们应该实现javax.validation.ConstraintValidatorinterface jsr - 303规范验证器实现。如果我们使用数据源等一些资源,我们可以在initialize()方法初始化它们。验证方法是isValid和其他它返回true,如果数据是有效的它应该返回false。 
EmployeeFormValidator.java 
package org.lxl.spring.form.validator; 
import org.springframework.validation.Errors; 
import org.springframework.validation.ValidationUtils; 
import org.springframework.validation.Validator; 
import org.lxl.spring.form.model.Employee; 
public class EmployeeFormValidator implements Validator{ 
//which objects can be validated by this validator 
@Override 
public boolean supports(Class<?> paramClass) { 
return Employee.class.equals(paramClass); 
} 
@Override 
public void validate(Object obj, Errors errors) { 
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "id", "id.required"); 
Employee emp = (Employee) obj; 
if(emp.getId() <=0){ 
errors.rejectValue("id", "negativeValue",new Object[]{"'id'"},"id can't be negative"); 
} 
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "name.required"); 
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "role", "role.required"); 
} 
} 
EmployeeFormValidator是自定义验证实现类。support()方法是validator接口中规定的方法,告诉Spring框架,哪个类能使用这个验证。 

 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/12124.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论