zoukankan      html  css  js  c++  java
  • 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 - 303规范确认。最重要的部分是@Constraint注释,我们提供的类即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框架,哪个类能使用这个验证。
     
  • 相关阅读:
    不移除通知的话,出现的bug
    嵌入式-第一季-第14课
    嵌入式-第一季-第13课
    嵌入式-第一季-第12课
    嵌入式-第一季-第11课
    嵌入式-第一季-第10课
    嵌入式-第一季-第9课
    嵌入式-第一季-第8课
    嵌入式-第一季-第7课
    嵌入式-第一季-第6课
  • 原文地址:https://www.cnblogs.com/HHR-SUN/p/7076397.html
Copyright © 2011-2022 走看看