【源码分析-Spring Boot】-4.Spring Boot 参数校验是如何实现的


Spring Boot 参数校验:【从零开始学Spring Boot】-4.Spring Boot Validation 参数校验

1.注解校验如何生效的?

在 UserController#add 方法上有使用 @Valid 注解,标明这个方法需要校验,同时也可以使用 @Validated 注解标明要校验的位置。那么 @Valid 是如何生效的呢?

SpringBoot学习(三)——WebMVC及其工作原理 中,有跟踪 Spring MVC 的运行原理,@Valid 的注解校验就在

RequestMappingHandlerAdapter#invokeHandlerMethod 方法中

在 ConstraintTree#validateSingleConstraint 中使用具体的 Validator 对参数进行校验

protected final <T, V> Set<ConstraintViolation<T>> validateSingleConstraint(ValidationContext<T> executionContext, ValueContext<?, ?> valueContext, ConstraintValidatorContextImpl constraintValidatorContext, ConstraintValidator<A, V> validator) {
    boolean isValid;
    try {
        V validatedValue = valueContext.getCurrentValidatedValue();
        isValid = validator.isValid(validatedValue, constraintValidatorContext);
    } catch (RuntimeException var7) {
        if (var7 instanceof ConstraintDeclarationException) {
            throw var7;
        }

        throw LOG.getExceptionDuringIsValidCallException(var7);
    }

    return !isValid ? executionContext.createConstraintViolations(valueContext, constraintValidatorContext) : Collections.emptySet();
}


文章作者: Soulballad
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Soulballad !
评论
 上一篇
【从零开始学Spring Boot】-5.Spring Boot Profile环境隔离 【从零开始学Spring Boot】-5.Spring Boot Profile环境隔离
1.简介1.1 概述 Spring Profiles provide a way to segregate parts of your application configuration and make it be available o
下一篇 
【从零开始学Spring Boot】-4.Spring Boot Validation 参数校验 【从零开始学Spring Boot】-4.Spring Boot Validation 参数校验
1.简介1.1 概述 The method validation feature supported by Bean Validation 1.1 is automatically enabled as long as a JSR-303
  目录