Java Hibernate验证程序-验证嵌套属性

Java Hibernate验证程序-验证嵌套属性,java,bean-validation,Java,Bean Validation,我得到了下面的测试用例,并有一个问题。为什么没有groups参数的嵌套属性的验证总是失败?如何在没有组的情况下实现嵌套属性的验证 提前Thx 问候 基督教徒 我的测试用例: package validation; import java.util.Set; import javax.validation.*; import javax.validation.constraints.*; import junit.framework.Assert;

我得到了下面的测试用例,并有一个问题。为什么没有groups参数的嵌套属性的验证总是失败?如何在没有组的情况下实现嵌套属性的验证

提前Thx

问候

基督教徒

我的测试用例:

    package validation;
    import java.util.Set;
    import javax.validation.*;
    import javax.validation.constraints.*;
    import junit.framework.Assert;
    import lombok.Data;
    import lombok.extern.slf4j.Slf4j;
    import org.junit.*;

    @Slf4j
    public class NestedPropertiesTest {

        private ValidatorFactory factory;
        private Validator validator;

        @Before
        public void setUp() throws Exception {
            log.info("\n\nTest start:");
            this.factory = Validation.buildDefaultValidatorFactory();
            this.validator = factory.getValidator();
        }

        @Test
        public void testNestedBarNullValue() {
            Foo foo = new Foo();
            Bar bar = new Bar();
            bar.setNotempty(null);
            foo.setBar(bar);
            log.info("With groups:");
            Set<ConstraintViolation<Foo>> errors = validator.validateProperty(foo, "bar.notempty", Checks.class);
            logErrors(errors);
            Assert.assertFalse(errors.isEmpty());
            log.info("Without groups:");
            errors = validator.validateProperty(foo, "bar.notempty");
            logErrors(errors);
            Assert.assertFalse(errors.isEmpty());
        }

        @Test
        public void testNestedBarMinSize() {
            Foo foo = new Foo();
            Bar bar = new Bar();
            bar.setNotempty("1");
            foo.setBar(bar);
            log.info("With groups:");
            Set<ConstraintViolation<Foo>> errors = validator.validateProperty(foo, "bar.notempty", Checks.class);
            logErrors(errors);
            Assert.assertFalse(errors.isEmpty());
            log.info("Without groups:");
            errors = validator.validateProperty(foo, "bar.notempty");
            logErrors(errors);
            Assert.assertFalse(errors.isEmpty());
        }

        @SuppressWarnings("rawtypes")
        private void logErrors(Set errors) {
            log.info("Nr. of validation errors: {}", errors.size());
            for (Object error : errors) {
                ConstraintViolation cv = (ConstraintViolation) error;  
                log.info("{}: {}", cv.getPropertyPath(), cv.getMessage());
            }
        }

        @Data private class Foo {
            @Valid private Bar bar;
        }
        @Data private class Bar {
            @NotNull(groups=Checks.class)
            @Size(min = 2, groups=Checks.class)
            private String notempty;
        }
        private interface Checks {}
    }
包验证;
导入java.util.Set;
导入javax.validation.*;
导入javax.validation.constraints.*;
导入junit.framework.Assert;
导入龙目数据;
导入lombok.extern.slf4j.slf4j;
导入org.junit.*;
@Slf4j
公共类嵌套属性测试{
私营工厂;
私人验证器;
@以前
public void setUp()引发异常{
log.info(“\n\n测试开始:”);
this.factory=Validation.buildDefaultValidatorFactory();
this.validator=factory.getValidator();
}
@试验
public void testNestedBarNullValue(){
Foo-Foo=新的Foo();
条形=新条形();
bar.setNotempty(null);
foo.立根节(bar);
log.info(“与组:”);
Set errors=validator.validateProperty(foo,“bar.notempty”,Checks.class);
日志错误(错误);
Assert.assertFalse(errors.isEmpty());
log.info(“无组:”);
errors=validator.validateProperty(foo,“bar.notempty”);
日志错误(错误);
Assert.assertFalse(errors.isEmpty());
}
@试验
public void testNestedBarMinSize(){
Foo-Foo=新的Foo();
条形=新条形();
酒吧设置为空(“1”);
foo.立根节(bar);
log.info(“与组:”);
Set errors=validator.validateProperty(foo,“bar.notempty”,Checks.class);
日志错误(错误);
Assert.assertFalse(errors.isEmpty());
log.info(“无组:”);
errors=validator.validateProperty(foo,“bar.notempty”);
日志错误(错误);
Assert.assertFalse(errors.isEmpty());
}
@抑制警告(“原始类型”)
专用void日志错误(设置错误){
log.info(“验证错误数:{}”,errors.size());
对于(对象错误:错误){
ConstraintViolation cv=(ConstraintViolation)错误;
log.info(“{}:{}”,cv.getPropertyPath(),cv.getMessage());
}
}
@数据私有类Foo{
@有效的私人酒吧;
}
@数据专用类栏{
@NotNull(组=Checks.class)
@大小(最小值=2,组数=Checks.class)
私有字符串notempty;
}
专用接口检查{}
}
我的pom(以防万一):


4.0.0
诺格
验证
0.0.1-快照
org.hibernate
休眠验证器
4.2.0.4最终版本
朱尼特
朱尼特
4.10
测试
org.projectlombok
龙目
0.11.0
假如
org.slf4j
slf4j简单
1.6.4

一旦指定了组,您的约束就不再是默认组的隐式部分。如果希望注释仍在默认组中,则需要指定它

    @Data private class Bar {
        @NotNull(groups={Checks.class, javax.validation.groups.Default.class})
        @Size(min = 2, groups={Checks.class, javax.validation.groups.Default.class})
        private String notempty;
    }
    @Data private class Bar {
        @NotNull(groups={Checks.class, javax.validation.groups.Default.class})
        @Size(min = 2, groups={Checks.class, javax.validation.groups.Default.class})
        private String notempty;
    }