代码之家  ›  专栏  ›  技术社区  ›  SirCipher

使用hibernate验证程序的奇怪行为

  •  1
  • SirCipher  · 技术社区  · 6 年前

    在验证对象时,我使用HibernateValidator6.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 要在对象上运行的验证程序。

    enter image description here

    我试过把 @不为空 验证器(作为 @不空 验证器会处理它),但我为了完整性而保留它,以证明 @不空 验证器没有返回上面图像中的任何内容。

    我不明白为什么它在部署到web项目时不运行,但在junit测试下运行时运行良好。有什么我遗漏的吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   SirCipher    6 年前

    好吧,我已经解决了。我没有意识到我把项目部署到了错误的服务器上。我已经将它部署到payara 4.1.1.171服务器,而不是payara 5.181服务器。然而,我本希望在部署时显示某种信息。