Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/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
JavaBean验证:多@GroupSequence和类级约束_Java_Spring Mvc_Bean Validation - Fatal编程技术网

JavaBean验证:多@GroupSequence和类级约束

JavaBean验证:多@GroupSequence和类级约束,java,spring-mvc,bean-validation,Java,Spring Mvc,Bean Validation,我试图在SpringMVC环境中建立一个复杂的bean验证和排序 到目前为止,我得到的是: @Data // Lombok @CheckActivationIO(groups = {C1.class}) public class ActivateIO { @NotNull(message = "NULL", groups = B1.class) @Email(message = "FORMAT", groups = B2.class) @InactiveAccount(

我试图在SpringMVC环境中建立一个复杂的bean验证和排序

到目前为止,我得到的是:

@Data // Lombok
@CheckActivationIO(groups = {C1.class})
public class ActivateIO {

    @NotNull(message = "NULL", groups = B1.class)
    @Email(message = "FORMAT", groups = B2.class)
    @InactiveAccount(groups = B3.class)
    private String email;

    @NotNull(message = "NULL", groups = A1.class)
    @Size(min = 10, max = 12, message = "LENGTH", groups = A2.class)
    private String token;
}
和groupSequence接口:

@GroupSequence({A1.class, A2.class, A3.class, A4.class})
public interface ASequence {
}

@GroupSequence({B1.class, B2.class, B3.class, B4.class})
public interface BSequence {
}

@GroupSequence({Default.class, C1.class, C2.class})
public interface CSequence {
}
以下是验证程序的调用方式:

validator.validate(activateIO, ASequence.class, BSequence.class, CSequence.class);
目标是独立地验证电子邮件和令牌,并且仅当两者都有效时,才应执行类级约束@checkActivationo

一些例子:

电子邮件-空和令牌-长度 电子邮件-格式和令牌有效 电子邮件和令牌有效&@checkActivationo失败 使用GroupSequences,我可以独立完成属性,也可以单独完成属性后的类级别,但不能一起完成。有什么建议吗?如何解决这个问题?在这种情况下,仅当序列A已通过组A2且序列B已通过组B3时,才必须执行@CheckActivationIO约束

也许一个小图表可以让它更清楚:

所提供的代码实现了图的并行部分,并可用于查找。我正在尝试使用额外的顺序序列C,只有当两个并行序列都有效时才应该执行。这里的并行意味着按照给定的顺序独立验证相应的属性。A中的验证错误不会影响序列B


问题:我如何定义一个依赖于其他多个以前的groupSequence的groupSequence?

我不确定你的意思:使用groupSequence,我可以分别执行这两项操作,但不能同时执行。你想做什么?我想以有序的方式独立验证属性。假设自定义验证器相互依赖。因此,存在序列A和B。只有当两个序列都有效时,验证才应继续进行类级别的注释,同样顺序为序列C?。有没有办法强迫这种行为?我看到这个用例是高度构造的,可能与实践无关,但我试图理解这个过程的局限性。但这就是你的示例/设置所做的,对吗?还是有具体的问题?这个例子实现了两个属性的独立验证。问题在于序列C。它是与其他两个序列并行计算的,而不是之后。我可以用一个序列再做一次,先删除a和B序列,但我不能同时使用这两种方法。我能把序列C和序列A和B联系起来吗?我想我知道了。在这种情况下,您确实需要另一个序列,其顺序为ASequence、BSequence,最后是CSequence——我们称之为validationsequence。然后需要按以下顺序调用Validatorvalidate:validator.validateactivateIO,validationSequence.class;