在我的自定义 ConstraintValidator 的代码中,我使用了这样的构造函数
new ConstraintValidatorContextImpl(
new ArrayList<String>(),
DefaultTimeProvider.getInstance(),
PathImpl.createPathFromString(param),
violation.getConstraintDescriptor());
在运行时这会导致错误
java.lang.NoSuchMethodError: org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorContextImpl.<init>(Ljava/util/List;Lorg/hibernate/validator/spi/time/TimeProvider;Lorg/hibernate/validator/internal/engine/path/PathImpl;Ljavax/validation/metadata/ConstraintDescriptor;)
我在 build.gradle 的依赖项中添加了下面的行
runtime 'org.hibernate:hibernate-validator:5.2.2.Final'
但这没有帮助。
无需构造函数,ConstraintValidatorContextImpl 必须使用工厂构造。
这就是解决方案:
context.buildConstraintViolationWithTemplate("message").addPropertyNode("field").addConstraintViolation();