侧边栏壁纸
博主头像
soulballad博主等级

技术文章记录及总结

  • 累计撰写 169 篇文章
  • 累计创建 26 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

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

soulballad
2020-07-12 / 0 评论 / 0 点赞 / 52 阅读 / 1,014 字
温馨提示:
本文最后更新于 2022-03-03,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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();
}

0

评论区