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

如何通过Jakarta Validation Groups放宽默认校验规则?

能否通过Jakarta Validation Groups实现校验规则放宽?

可以实现,核心是利用Jakarta Validation的分组白名单机制:指定校验分组后,只有关联到该分组的校验规则会被执行。通过给不同校验注解配置不同分组,就能区分默认严格校验和放宽校验的场景。

具体实现步骤:

  1. 定义自定义校验组接口
    首先创建一个标记接口作为放宽校验的分组:

    public interface EmailNullable {}
    

    (Jakarta Validation自带javax.validation.groups.Default组,所有未指定分组的校验注解默认归属于该组)

  2. 调整实体类的校验注解分组配置
    修改Person类,给name的@NotNull同时关联默认组和自定义的EmailNullable组;给email的@NotNull仅关联默认组:

    class Person {
      
      // 同时在Default和EmailNullable分组下生效
      @NotNull(groups = {Default.class, EmailNullable.class})
      private String name;
      
      // 仅在Default分组下生效
      @NotNull(groups = Default.class)
      private String email;
    }
    
  3. 不同场景的校验调用

    • 默认严格校验场景:调用validate时不指定分组,默认使用Default组,此时name和email的@NotNull都会执行:
      validator.validate(person);
      
    • 放宽校验场景:调用validate时指定EmailNullable组,此时只有关联到该组的name字段会被校验,email的@NotNull因不属于该分组而被跳过,允许为null:
      validator.validate(person, EmailNullable.class);
      

关键说明:

Jakarta Validation的分组是白名单模式,指定分组后只会执行属于该分组的校验规则。如果需要让某个校验规则在多个分组下生效,只需在groups属性中指定多个分组接口即可。

内容的提问来源于stack exchange,提问作者Rostislav Olshevsky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 13:02:13