如何通过Jakarta Validation Groups放宽默认校验规则?
能否通过Jakarta Validation Groups实现校验规则放宽?
可以实现,核心是利用Jakarta Validation的分组白名单机制:指定校验分组后,只有关联到该分组的校验规则会被执行。通过给不同校验注解配置不同分组,就能区分默认严格校验和放宽校验的场景。
具体实现步骤:
定义自定义校验组接口
首先创建一个标记接口作为放宽校验的分组:public interface EmailNullable {}(Jakarta Validation自带
javax.validation.groups.Default组,所有未指定分组的校验注解默认归属于该组)调整实体类的校验注解分组配置
修改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; }不同场景的校验调用
- 默认严格校验场景:调用
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
相关产品推荐
相关产品推荐

