Hibernate validation - only validate if object is not null

前端 未结 1 1005
梦谈多话
梦谈多话 2020-12-17 03:09

I want to validate the myClass variable. The trouble is that myClass can be either null or a reference to a myCl

相关标签:
1条回答
  • 2020-12-17 03:29

    When you say that this validation never takes place are you referring to situations where myField is null or populated (or either)?

    As I am also using the Validator on one of my projects, I ran a little test and when myField is null, it is not validated. When it is not null, it is. I am using the following versions:

    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.1.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.0.1.Final</version>
    </dependency>
    <dependency>
        <groupId>javax.el</groupId>
        <artifactId>javax.el-api</artifactId>
        <version>3.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>javax.el</artifactId>
        <version>2.2.4</version>
    </dependency>
    

    Here is the test code:

    public class MyClass {
    
        public MyClass() {
        }
    
        public MyClass(String myField) {
            this.myField = myField;
        }
    
        @Pattern(regexp="\\d+\\D+")
        private String myField; 
    }
    
    public class ParentClass {
    
        @Valid
        private MyClass myClass;
    
        public ParentClass() {
        }
    
        public ParentClass(MyClass myClass) {
            this.myClass = myClass;
        }
    }
    
    public class ValidatorTest {
    
        javax.validation.Validator v;
    
        @Before
        public void setup() {
            ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
            v = factory.getValidator();     
        }
    
        @Test
        public void testValidations() {
            Assert.assertEquals(0, v.validate(new ParentClass()).size()); // Null reference
            Assert.assertEquals(0, v.validate(new ParentClass(new MyClass())).size()); // Valid reference, null field
            Assert.assertEquals(1, v.validate(new ParentClass(new MyClass("I fail"))).size());
            Assert.assertEquals(0, v.validate(new ParentClass(new MyClass("1 pass"))).size());
        }
    }
    

    I hope this helps. It seems (to me) the behaviour demonstrated is correct.

    0 讨论(0)
提交回复
热议问题