美文网首页
如何通过Hibernate-Validation进行参数验证

如何通过Hibernate-Validation进行参数验证

作者: Java旺 | 来源:发表于2020-09-08 10:51 被阅读0次

    在开发JAVA服务器端代码时,我们会遇到对外部传来的参数合法性进行验证,而hibernate-validator提供了一些常用的参数校验注解,我们可以拿来使用。

    image

    1.maven中引入hibernate-validator对应的jar:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>4.3.1.Final</version> 
    </dependency>
    

    2.在Model中定义要校验的字段(即该字段不能为空,并且最大长度为14):

    import javax.validation.constraints.Pattern;
    import javax.validation.constraints.Size;
    import org.hibernate.validator.constraints.NotEmpty;
    
    public class PayRequestDto {
    
        /**
         * 支付完成时间
         **/
        @NotEmpty(message="支付完成时间不能空")
        @Size(max=14,message="支付完成时间长度不能超过{max}位")
        private String payTime;
    
        /**
         * 状态
         **/
        @Pattern(regexp = "0[0123]", message = "状态只能为00或01或02或03")
        private String status;
    
        public String getPayTime() {
            return payTime;
        }
    
        public void setPayTime(String payTime) {
            this.payTime = payTime;
        }
    
        public String getStatus() {
            return status;
        }
    
        public void setStatus(String status) {
            this.status = status;
        }
    }
    

    3.定义Validation工具类:

    import java.util.Set;
    import javax.validation.ConstraintViolation;
    import javax.validation.Validation;
    import javax.validation.Validator;
    import org.hibernate.validator.HibernateValidator;
    import com.atai.framework.lang.AppException;
    
    public class ValidationUtils {
    
        /**
         * 使用hibernate的注解来进行验证
         * 
         */
        private static Validator validator = Validation
                .byProvider(HibernateValidator.class).configure().failFast(true).buildValidatorFactory().getValidator();
    
        public static <T> void validate(T obj) {
            Set<ConstraintViolation<T>> constraintViolations = validator.validate(obj);
            // 抛出检验异常
            if (constraintViolations.size() > 0) {
                throw new AppException("0001", String.format("参数校验失败:%s", constraintViolations.iterator().next().getMessage()));
            }
        }
    }
    

    4.在代码中调用工具类进行参数校验:

    ValidationUtils.validate(requestDto);
    

    以下是对hibernate-validator中部分注解进行描述:

    image

    Bean Validation 中内置的 constraint

    @Null 被注释的元素必须为 null

    @NotNull 被注释的元素必须不为 null

    @AssertTrue 被注释的元素必须为 true

    @AssertFalse 被注释的元素必须为 false

    @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值

    @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值

    @DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值

    @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值

    @Size(max=, min=) 被注释的元素的大小必须在指定的范围内

    @Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内

    @Past 被注释的元素必须是一个过去的日期

    @Future 被注释的元素必须是一个将来的日期

    @Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式

    Hibernate Validator 附加的 constraint

    @NotBlank(message =) 验证字符串非null,且长度必须大于0

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

    @Length(min=,max=) 被注释的字符串的大小必须在指定的范围内

    @NotEmpty 被注释的字符串的必须非空

    @Range(min=,max=,message=) 被注释的元素必须在合适的范围内

    来源:https://www.tuicool.com/articles/ZNZzuaq

    欢迎关注微信公众号【慕容千语】

    相关文章

      网友评论

          本文标题:如何通过Hibernate-Validation进行参数验证

          本文链接:https://www.haomeiwen.com/subject/tisdektx.html