Hibernatevalidation – 仅validation对象是否为空
我想validationmyClass
变量。 麻烦的是myClass
可以是null或对myClass对象的引用 。 如果它是一个引用,我希望它validation对象,如果它是null,显然不应该进行validation。
以下工作但myClass 不能为null。
public class ParentClass { @Valid @NotNull private MyClass myClass; } public MyClass { @Pattern(regexp="\\d.{10}") private String myField; }
如果我从ParentClass
删除@NotNull
注释,即使我保留@Valid
注释,它也不再执行validation。
public class ParentClass { @Valid private MyClass myClass; } public MyClass { @Pattern(regexp="\\d.{10}") //this validation never takes place private String myField; }
是否可以使用jpa / hibernate注释validation可选的空字段?
当你说this validation never takes place
,你指的是myField为null或填充(或者是否)的情况?
由于我在我的一个项目中也使用了Validator,我运行了一些测试,当myField为null时,它没有经过validation。 当它不为null时,它就是。 我使用以下版本:
javax.validation validation-api 1.1.0.Final org.hibernate hibernate-validator 5.0.1.Final javax.el javax.el-api 3.0.0 org.glassfish.web javax.el 2.2.4
这是测试代码:
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()); } }
我希望这有帮助。 似乎(对我而言)certificate的行为是正确的。