Hibernate Validator 的奇怪行为
Strange behaviour with Hibernate Validator
我在使用 Hibernate Validator 6.0 时遇到一些奇怪的行为。9.Final 在验证对象时。给定以下 POJO:
public class Log {
private Long uid;
@javax.validation.constraints.NotEmpty
@javax.validation.constraints.NotNull
private String value;
private long reference;
private String type;
private String createdDt;
private String createdBy;
private Boolean actioned;
private Long dxr;
// Constructors..
// Getters and setters...
// Equals and hashcode overrides...
}
现在,如果我使用新实例 JUnit 测试验证实体,我会得到以下输出:
@Test
public void test() {
Log cLog = new Log();
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
Validator beanvalidator = validatorFactory.getValidator();
Set<ConstraintViolation<CommunicationLog>> constraintViolations = beanvalidator.validate(cLog);
System.out.println(constraintViolations);
}
[ConstraintViolationImpl{interpolatedMessage='must not be null', propertyPath=value, rootBeanClass=class Log, messageTemplate='{javax.validation.constraints.NotNull.message}'},
ConstraintViolationImpl{interpolatedMessage='must not be empty', propertyPath=value, rootBeanClass=class Log, messageTemplate='{javax.validation.constraints.NotEmpty.message}'}]
很好。但是,如果我 运行 这个 相同的代码 在一个 Hibernate/Jersey 项目上,只有 @NotNull
验证 运行。我似乎无法在对象上将 @NotEmpty
验证器设置为 运行。
我已经尝试删除 @NotNull
验证器(因为 @NotEmpty
验证器会处理它)但为了完整性我将其保留以证明 @NotEmpty
验证器没有返回上图中的任何东西。
我不明白为什么它在部署到 Web 项目时不 运行ning 但在 JUnit 测试下 运行ning 时工作正常。我在这里遗漏了什么吗?
好的,我已经解决了这个问题。我没有意识到我把项目部署到了错误的服务器上。我已将它部署到 Payara 4.1.1.171 服务器而不是 Payara 5.181 服务器。但是,我本以为会显示某种信息——也许是在部署时。
我在使用 Hibernate Validator 6.0 时遇到一些奇怪的行为。9.Final 在验证对象时。给定以下 POJO:
public class Log {
private Long uid;
@javax.validation.constraints.NotEmpty
@javax.validation.constraints.NotNull
private String value;
private long reference;
private String type;
private String createdDt;
private String createdBy;
private Boolean actioned;
private Long dxr;
// Constructors..
// Getters and setters...
// Equals and hashcode overrides...
}
现在,如果我使用新实例 JUnit 测试验证实体,我会得到以下输出:
@Test
public void test() {
Log cLog = new Log();
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
Validator beanvalidator = validatorFactory.getValidator();
Set<ConstraintViolation<CommunicationLog>> constraintViolations = beanvalidator.validate(cLog);
System.out.println(constraintViolations);
}
[ConstraintViolationImpl{interpolatedMessage='must not be null', propertyPath=value, rootBeanClass=class Log, messageTemplate='{javax.validation.constraints.NotNull.message}'},
ConstraintViolationImpl{interpolatedMessage='must not be empty', propertyPath=value, rootBeanClass=class Log, messageTemplate='{javax.validation.constraints.NotEmpty.message}'}]
很好。但是,如果我 运行 这个 相同的代码 在一个 Hibernate/Jersey 项目上,只有 @NotNull
验证 运行。我似乎无法在对象上将 @NotEmpty
验证器设置为 运行。
我已经尝试删除 @NotNull
验证器(因为 @NotEmpty
验证器会处理它)但为了完整性我将其保留以证明 @NotEmpty
验证器没有返回上图中的任何东西。
我不明白为什么它在部署到 Web 项目时不 运行ning 但在 JUnit 测试下 运行ning 时工作正常。我在这里遗漏了什么吗?
好的,我已经解决了这个问题。我没有意识到我把项目部署到了错误的服务器上。我已将它部署到 Payara 4.1.1.171 服务器而不是 Payara 5.181 服务器。但是,我本以为会显示某种信息——也许是在部署时。