跳至主要內容

Spring-Boot-参数校验是如何实现的

soulballad架构源码分析SpringBoot源码分析约 233 字小于 1 分钟

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

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

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

SpringBoot学习(三)——WebMVC及其工作原理open in new window 中,有跟踪 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