@Getter
@Setter
@ToString
public class UserRequest {
@NotNull
@Size(max = 50)
private String name;
@Valid
private AddressRequest address;
}
@Getter
@Setter
@ToString
public class AddressRequest {
@Size(max = 50)
private String street;
@Size(max = 50)
private String postcode;
@NotNull
private String country;
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
AddressRequest that = (AddressRequest) o;
if (street != null ? !street.equals(that.street) : that.street != null) {
return false;
}
if (postcode != null ? !postcode.equals(that.postcode) : that.postcode != null) {
return false;
}
if (country != that.country) {
return false;
}
return true;
}
@Override
public int hashCode() {
int result = street != null ? street.hashCode() : 0;
result = 31 * result + (postcode != null ? postcode.hashCode() : 0);
result = 31 * result + country.hashCode();
return result;
}
}
我使用Hibernate Validator5.2。有什么方法可以配置它来避免这种情况吗?
这是来自NPE的堆栈跟踪:
javax.validation.ValidationException: HV000041: Call to TraversableResolver.isReachable() threw an exception.
at org.hibernate.validator.internal.engine.ValidatorImpl.isReachable(ValidatorImpl.java:1531) ~[hibernate-validator-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.validator.internal.engine.ValidatorImpl.isValidationRequired(ValidatorImpl.java:1507) ~[hibernate-validator-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.validator.internal.engine.ValidatorImpl.validateMetaConstraint(ValidatorImpl.java:584) ~[hibernate-validator-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:555) ~[hibernate-validator-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:490) ~[hibernate-validator-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:454)
...
...
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_66]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_66]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.0.28.jar:8.0.28]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_66]
Caused by: java.lang.NullPointerException: null
at com.example.dto.AddressRequest.hashCode(AddressRequest.java:106) ~[classes/:na]
at org.hibernate.validator.internal.engine.resolver.CachingTraversableResolverForSingleValidation$TraversableHolder.buildHashCode(CachingTraversableResolverForSingleValidation.java:143) ~[hibernate-validator-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.validator.internal.engine.resolver.CachingTraversableResolverForSingleValidation$TraversableHolder.<init>(CachingTraversableResolverForSingleValidation.java:104) ~[hibernate-validator-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.validator.internal.engine.resolver.CachingTraversableResolverForSingleValidation$TraversableHolder.<init>(CachingTraversableResolverForSingleValidation.java:86) ~[hibernate-validator-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.validator.internal.engine.resolver.CachingTraversableResolverForSingleValidation.isReachable(CachingTraversableResolverForSingleValidation.java:31) ~[hibernate-validator-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.validator.internal.engine.ValidatorImpl.isReachable(ValidatorImpl.java:1522) ~[hibernate-validator-5.2.2.Final.jar:5.2.2.Final]
... 101 common frames omitted
因此,此问题已作为https://hibernate.atlassian.net/browse/hv-1013的一部分得到修复。
你能把HV升级到最新的稳定,例如5.4.1.final吗?
它应该是一个临时替换(请参见这里的迁移指南:https://developer.jboss.org/wiki/HibernateValidatorMigrationGuide)。
问题内容: 问题已经解决了这里,但没有工作,我(不相同的弹簧引导版本我猜)本 尝试编写自定义约束验证器代码,以在保留之前检查帐户电子邮件是否存在。 // ------------------------------------------------ -------------------------- // --------------------------------------------
问题已经在这里解决了,但对我不起作用(我猜不是同一个Spring启动版本) 尝试编写自定义约束验证器,在持久化之前检查帐户电子邮件是否存在。 // -------------------------------------------------------------------------- // ------------------------------------------------
现在,我正在用Spring MVC开发一个web应用程序。 样品值可以是“0.05”、“1.00”、“12.55”等。 因此,如果有任何办法来解决这个问题,请点亮我。谢了。
首先,我是Vaadin7的新手。当我发现BeanFieldGroup.class时,我正在尝试一些vaadin演示。正如我所看到的,这个类将一个字段绑定到一个bean属性。在bean中,使用验证约束注释对属性进行注释(JSR303)。在本例中,我的pom.xml包含hibernate验证器依赖项: 我创建了validationmessage.properties文件,并在其中放了一些消息(带有匈牙
我试图用Hibernate Validation 6.0.1定义约束定义,其中验证器位于相对于约束注释的不同位置(.jar/项目)。Aka,我有我想要验证的对象,它们位于带有注释定义的项目“api”中,但我将在项目“modules/common”中有验证器 我遵循文档中的描述。 配置文件 约束注释 验证器 我的问题我的问题是,如果我没有将“@约束(validatedby={})”放在注释中,我会得
我正在使用Spring Boot 2.2.0用java bean验证框架构建一个restful服务。Hibernate-Validator在幕后使用。验证工作得很好,但在一个字段与约束不匹配后会引发异常。我想先验证所有字段,然后给消费者一个包含所有错误的响应。这可能吗?