You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bean Validation/Hibernate Validator能否在验证时检测请求的验证组?

如何在自定义约束验证器中获取当前请求的验证组?

这是一个旧问题的延续,时隔九年及多个Bean Validation规范版本发布后,想确认规范是否有更新,或是Hibernate Validator是否提供了非标准解决方案:能否让自定义约束验证器通过ConstraintValidatorContext检测到本次验证请求传入的验证组?

具体场景示例

假设存在如下Bean:

public class MyBean {

  @MyConstraint(value = 5, groups = V1.class)
  @MyConstraint(value = 10, groups = {V2.class, V3.class})
  private int foo;

  // 省略其他代码
}

当调用验证方法时:

validator.validateValue(MyBean.class, "foo", 7, V2.class);

希望自定义约束验证器能检测到本次请求的验证组为V2.class,验证器代码如下:

public class MyConstraintValidator implements ConstraintValidator<MyConstraint, Integer> {

  // 省略初始化等代码

  @Override
  public boolean isValid(Integer value, ConstraintValidatorContext context) {
    Class<?>[] requestedValidationGroups = // 期望此处获取到 {V2.class}
    // 业务逻辑处理
    return false;
  }
}

当前遇到的问题

在initialize方法中仅能获取到约束注解上静态声明的组(比如{V1.class}或{V2.class, V3.class}),但实际需要的是本次验证请求传入的{V2.class}。

已做的排查

查看Hibernate Validator 6.0源码后发现,理论上需要访问org.hibernate.validator.internal.engine.ValueContext<T, V>的currentGroup属性,但该属性以及ValueContext并未传入org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorContextImpl,且该类的创建逻辑无法定制,寻求进一步解决提示。


内容的提问来源于stack exchange,提问作者Mauro Molinari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 21:15:05