Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的条件验证_Java_Validation_Server Side_Bean Validation - Fatal编程技术网

Java中的条件验证

Java中的条件验证,java,validation,server-side,bean-validation,Java,Validation,Server Side,Bean Validation,我试图在对象图中进行bean验证。假设我有两门课叫做Foo和Bar。他们有“一对一”的关系 Foo.class class Foo { String a; String b; boolean c; @Valid Bar bar; } 酒吧 class Bar { String i; String j; String k; String l; } 我想验证Foo和Bar,但我想根据Foo.class中输入的值对Bar进行

我试图在对象图中进行bean验证。假设我有两门课叫做Foo和Bar。他们有“一对一”的关系

Foo.class

class Foo
{
    String a;
    String b;
    boolean c;

    @Valid
    Bar bar;
}
酒吧

class Bar
{
    String i;
    String j;
    String k;
    String l;
}
我想验证Foo和Bar,但我想根据Foo.class中输入的值对Bar进行条件验证。根据Foo.class中c的值,我想验证Bar.class中的字段。如果c为真,那么我想验证I和j。如果c为false,那么我想验证k和l


还有什么我可以做的吗?

我不认为有什么东西能满足你的要求。也就是说,有一种方法允许您使用自定义验证器对类进行注释。我想您可以编写一个验证器,它可以使用您所做的一些自定义注释,并在布尔值上加上指示是否运行Bar验证器。

使用纯Bean验证,您不可能按要求执行。Hibernate Validator有一个特定于提供程序的功能,称为
@GroupSequenceProvider
。使用此功能,您可以更改验证对象时执行的组序列。另请参见

这将有点困难,因为Bar对象没有引用回其关联的Foo实例。当然,您可以提供一个validate(boolean-cIsTrue)方法,但这可能不是您想要的。在我看来,你应该有两个子类的酒吧,酒吧1和酒吧2。Bar1只包含一个i和一个j,并且知道如何验证自己,而Bar2有一个k和一个l。一个类使用某些字段并具有一种行为,或者使用另一组字段并具有不同行为,这通常是一种“代码味道”。