如何实现@NotBlank与@Pattern校验的错误消息场景隔离?
解决字段空白时多校验错误提示的问题
问题场景
现有实体类字段校验代码如下:
@NotBlank(message = "userCategory is missing") @Pattern(regexp = "Single|Married", message = "userCategory is invalid") private String userCategory;
当userCategory为空白/空格值时,会返回两条错误信息:
"errors": [ { "message": "userCategory is missing" }, { "message": "userCategory is invalid" } ]
需求是:
- 当字段为空或空格时,仅返回「userCategory is missing」错误
- 仅当输入非空白的无效值(如
abddd)时,才返回「userCategory is invalid」错误
解决方案
利用Spring Validation的分组校验+分组序列特性,让@Pattern校验仅在@NotBlank校验通过后执行:
- 定义两个校验分组接口
// 用于空白校验的分组 public interface BlankCheck {} // 用于格式校验的分组 public interface PatternCheck {}
- 给校验注解指定对应分组
@NotBlank(message = "userCategory is missing", groups = BlankCheck.class) @Pattern(regexp = "Single|Married", message = "userCategory is invalid", groups = PatternCheck.class) private String userCategory;
- 在实体类上添加分组序列注解,指定校验顺序
@GroupSequence({BlankCheck.class, PatternCheck.class}) public class YourEntity { // 上述userCategory字段定义 }
原理说明
@GroupSequence会按指定顺序执行分组内的校验逻辑:
- 先执行
BlankCheck分组的@NotBlank校验,若失败则直接返回错误,不会触发后续PatternCheck分组的@Pattern校验 - 只有
BlankCheck校验通过后,才会执行PatternCheck分组的格式校验
这样就能实现空白值仅返回缺失错误,非空白无效值返回格式错误的需求。
内容的提问来源于stack exchange,提问作者Mark Antony
相关产品推荐
相关产品推荐

