美文网首页
[java]61、hibernate-validator

[java]61、hibernate-validator

作者: 史记_d5da | 来源:发表于2022-11-01 23:12 被阅读0次

    1、基本使用

    1.1、介绍

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

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
    
    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<T> {
        @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<? extends Payload>[] payload() default {};
        class BoolNumberValidator implements ConstraintValidator<BoolNumber, Short> {
            @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

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