目录
现有框架的不足之处
我的改进内容
改进的成果
现有框架的不足之处
@Max是javax.validation包中的一个常用注解,用于对传入参数进行最大值校验。但是其校验区间为闭区间,且不支持修改,如:@Max(2),表示表示传入参数值应小于等于2。在特定业务场景下,我希望传入值应小于2,该注解无法满足需求,因此对其进行。
我的改进内容
在类加载时,会调用org.hibernate.validator.internal.engine.constraintvalidation.SimpleConstraintTree#validateConstraints 方法获取属性字段的校验器ConstraintValidator,并拿到约定的最大值。
随后调用校验器的isValid(T value, ConstraintValidatorContext context)方法进行参数校验,其接口对应实现类为AbstractMaxValidator
理解实现链路后,我对@Max注解进行了改造,添加了inclusive属性来指定开、闭区间(默认为闭区间)。
并在AbstractMaxValidator.java中同样引入inclusive属性,以实现对开、闭区间动态判断。
改进的成果
以前在业务中遇到类似的需求,只能在方法体中自己手写代码判断,实现起来相对比较麻烦。现在对@Max注解增强后,可以非常简洁、高效的对开、闭区间进行自定义配置,解决了开发中的一个痛点。