[java]61、hibernate-validator

1、基本使用

1.1、介绍

hibernate-validator是 java中常用的一款后端校验框架
1、在pom.xml中添加如下


    org.springframework.boot
    spring-boot-starter-validation

1.2、方法Model参数校验
@Data
public class DictItem {
    @NotBlank(message = "名称不能为空")
    private String name;
    @NotBlank(message = "值不能为空")
    private String value;
}

Model

使用方法
1、在Modelgetter或成员变量上加相关的校验注解
2、在Model参数上加@Valid的注解
校验失败时,会抛出异常
org.springframework.validation.BindException
可以通过BindException.getBindingResult().getAllErrors()拿到所有的错误信息

1.3、方法的非Model参数校验
@Validated
public abstract class BaseController {
    @PostMapping("/remove")
    public R remove(@NotBlank(message = "id不能为空") String id) {
    }
}

使用方法
1、在Controller上加@Validated注解
2、在非Model参数上加相关的校验注解
校验失败时,会抛异常
javax.validation.ConstraintViolationException
可以通过ContraintViolationException.getConstraintViolations()拿到所有的错误信息

1.4、异常捕获
@RestControllerAdvice
@Slf4j
public class CommonExceptionHandler {
    @ExceptionHandler(Throwable.class)
    @ResponseStatus(code = HttpStatus.BAD_REQUEST)
    public void handle(Throwable t) {
        log.error(null, t);
    }
}

2、常见注解

1、@Valid:被注释的元素是一个对象,需要检查此对象的所有字段值
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(value):被注释的元素必须符合指定的正则表达式
15、@Email:被注释的元素必须是电子邮箱地址
16、@Length:被注释的字符串的大小必须在指定的范围内
17、@NotEmpty:被注释的字符串的必须非空
18、@Range:被注释的元素必须在合适的范围内
19、@NotBlank:被注释的字符串的必须非空
20、@URL(protocol=,host=, port=,regexp=, flags=):被注释的字符串必须是一个有效的url
21、@CreditCardNumber:被注释的字符串必须通过Luhn校验算法,银行卡,信用卡等号码一般都用Luhn计算合法性

3、自定义校验

1、检测某个值是布尔类型

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Constraint(validatedBy = BoolNumber.BoolNumberValidator.class)
public @interface BoolNumber {
    String message() default "只能是0和1";
    Class[] groups() default {};
    Class[] payload() default {};
    class BoolNumberValidator implements ConstraintValidator {
        @Override
        public boolean isValid(Short aShort, ConstraintValidatorContext constraintValidatorContext) {
            return aShort == null || aShort == 0 || aShort == 1;
        }
    }
}

使用方式

@BoolNumber( message = "disabled只能是0和1")
private Integer disabled;

4、快速失败

默认情况下是检测完所有的错误后在统一抛出异常
也可以设置快速失败:只要检测到一个错误,就直接抛出异常,步子啊往下检测

@Configuration
public class ValidatorCfg {
    @Bean
    public Validator validator() {
        return (Validator) Validation
                .byProvider(HibernateValidator.class)
                .configure()
                .failFast(true)
                .buildValidatorFactory().getValidator();
    }
}

你可能感兴趣的:([java]61、hibernate-validator)