目录

一、介绍和依赖二、方法的 Model 参数校验三、方法的非 Model 参数校验四、常用注解五、快速失败六、自定义校验规则

一、介绍和依赖

hibernate-validator 是 Java 中常用的后端校验框架 https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/【参考文档】

 在 SpringBoot 项目中配置如下依赖:

org.springframework.boot

spring-boot-starter-validation

二、方法的 Model 参数校验

 使用步骤 ① 在 Model 的 get 方法或成员变量添加相关的校验注解 ② 给方法的 Model 参数添加 @Valid 注解

 若校验失败会抛异常 ① org.springframework.validation.BindException ② 通过 BindException.getBindingResult().getAllErrors() 可拿到全部的错误信息

三、方法的非 Model 参数校验

 使用步骤 ① 给 Controller 添加 @Validated 注解 ② 给非 Model 参数添加相关的校验注解

 校验失败会抛异常 ① javax.validation.ConstraintViolationException ② 通过 ConstraintViolationException.getConstraintViolations 可拿到全部的错误信息

四、常用注解

@NotNull: 不能为 null,可以为空串 @NotEmpty: 不能为 null,且长度必须大于 0 @NotBlank: 只能作用在 String 上,不能为 null,且去除空格后长度必须大于 0 @AssertFalse:必须为 false @AssertTrue:必须为 true @Max、@DecimalMax:必须为一个不大于指定值的数字 @Min、@DecimalMin:必须为一个不小于指定值的数字 @Digits: 必须为一个小数,且整数部分的位数不能超过 integer,小数部分的位数不能超过 fraction @Email:必须是 Email,也可以通过正则表达式和 flag 指定自定义的 Email 格式 @Future:必须是一个将来的日期 @Past:必须是一个过去的日期 @Range:必须在指定的范围内 @Size、@Length:长度必须在 min 到 max 之间 @Pattern: 必须符合指定的正则表达式

五、快速失败

 默认情况是检查完全部的错误后才统一抛异常  可以设置快速失败:只要检测到一个错误,就直接抛出异常,不再继续检测

@Configuration

public class ValidatorConfig {

@Bean

public Validator validator() {

return Validation.byProvider(HibernateValidator.class)

.configure()

.failFast(true)

.buildValidatorFactory()

.getValidator();

}

}

六、自定义校验规则

/**

* @author 庆医

* @describe 自定义【hibernate-validator】的校验注解

* 校验手机号码

*/

@Documented

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

@Constraint(validatedBy = IsRightPhone.isRightPhoneValidator.class)

public @interface IsRightPhone {

String message() default "手机号码格式错误";

Class[] groups() default {};

Class[] payload() default {};

class isRightPhoneValidator implements ConstraintValidator {

@Override

public boolean isValid(String val,

ConstraintValidatorContext context) {

if (null == val || val.length() != 11) return false;

return val.matches("^((19[0-9])|(13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$");

}

}

}

文章来源

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: