Java Bean验证:多个@GroupSequence和类级别约束

时间:2015-05-04 20:13:29

标签: java spring-mvc bean-validation

我正在尝试在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。

一些例子:

  1. 电子邮件 - NULL&令牌 - LENGTH
  2. 电子邮件 - 格式(&令牌有效)
  3. (电子邮件和令牌有效)& @CheckActivationIO失败
  4. 使用GroupSequences我可以单独执行这两个(属性之后独立的属性和类级别)但不能一起执行。任何指针,如何处理问题?在这种情况下,只有在序列A已通过组A2且序列B已通过组B3时,才能执行@CheckActivationIO约束。

    也许一个小图表更清晰:

    parallel and sequential group sequences

    提供的代码实现了图表的并行部分,并且可以查找。我正在使用附加的顺序序列C,只有在两个并行序列都有效时才应该执行。这里的并行意味着相应的属性以给定的顺序独立验证。 (A中的验证错误不会影响序列B.

    问题:如何定义依赖于多个其他先前groupSequences的groupSequence?

0 个答案:

没有答案