我正在尝试在spring mvc环境中设置一个复杂的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 Interfaces:
@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);
目标是独立验证电子邮件和令牌,并且只有两者都有效时,才应执行类级别约束@CheckActivationIO。
一些例子:
使用GroupSequences我可以单独执行这两个(属性之后独立的属性和类级别)但不能一起执行。任何指针,如何处理问题?在这种情况下,只有在序列A已通过组A2且序列B已通过组B3时,才能执行@CheckActivationIO约束。
也许一个小图表更清晰:
提供的代码实现了图表的并行部分,并且可以查找。我正在使用附加的顺序序列C,只有在两个并行序列都有效时才应该执行。这里的并行意味着相应的属性以给定的顺序独立验证。 (A中的验证错误不会影响序列B.
问题:如何定义依赖于多个其他先前groupSequences的groupSequence?