为什么Hibernate验证器不关心@Valid,而仅关心@notnull?
我正在尝试检查约束,看起来像这样。
class Registration {
@Valid
@NotNull
private User user;
}
class User {
@NotBlank
private String name;
@Max(128)
@Min(0)
@PositiveOrZero
private int age;
}
当我尝试调用 iSvalidfor(registration.class,“用户”,null)
时,它会填充一个非空的 set< condraintaintviolation< registration> ,如预期的。
但是它返回 iSvalidfor(registration.class,“用户”,< Invalid用户>)
的空集。
final Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
final User user = User.newInstanceWithInvalidAge();
Assertions.assertThat(validator.validate(user))
.isNotEmpty(); // succeeds
final BeanDescriptor constraints = validator.getConstraintsForClass(Registration.class);
for (final PropertyDescriptor constrainedProperty
: constraints.getConstrainedProperties()) {
log.debug("constrained property: {}", constrainedProperty);
for (final ConstraintDescriptor<?> constraintDescriptor
: constrainedProperty.getConstraintDescriptors()) {
log.debug("\tconstraint descriptor: {}", constraintDescriptor);
}
}
final Registration registration = Registration.builder().user(user).build();
Assertions.assertThat(validator.validate(registration))
.isNotEmpty(); // succeeds
Assertions.assertThat(validator.validateValue(Registration.class, "user", user))
.isNotEmpty(); // fails
这是它打印的东西。
constrained property: PropertyDescriptorImpl{
propertyName=user,
cascaded=true
}
constraint descriptor: ConstraintDescriptorImpl{
annotation=j.v.c.NotNull,
payloads=[],
hasComposingConstraints=true,
isReportAsSingleInvalidConstraint=false,
elementType=FIELD,
definedOn=DEFINED_LOCALLY,
groups=[interface javax.validation.groups.Default],
attributes={groups=[Ljava.lang.Class;@664a9613,
message={javax.validation.constraints.NotNull.message},
payload=[Ljava.lang.Class;@5118388b},
constraintType=GENERIC,
valueUnwrapping=DEFAULT
}
为什么 iSvalidfor
方法不在乎 @valid
?
我正在努力以下依赖关系。
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.1-b12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.23.Final</version>
<scope>test</scope>
</dependency>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我刚刚发现
@Valid
不被validateProperty
方法所尊重。我还是想知道为什么。
I just found the
@Valid
is not honored by thevalidateProperty
method.I still want to know why.