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

如何实现@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校验通过后执行:

  1. 定义两个校验分组接口
// 用于空白校验的分组
public interface BlankCheck {}
// 用于格式校验的分组
public interface PatternCheck {}
  1. 给校验注解指定对应分组
@NotBlank(message = "userCategory is missing", groups = BlankCheck.class)
@Pattern(regexp = "Single|Married", message = "userCategory is invalid", groups = PatternCheck.class)
private String userCategory;
  1. 在实体类上添加分组序列注解,指定校验顺序
@GroupSequence({BlankCheck.class, PatternCheck.class})
public class YourEntity {
    // 上述userCategory字段定义
}

原理说明

@GroupSequence会按指定顺序执行分组内的校验逻辑:

  • 先执行BlankCheck分组的@NotBlank校验,若失败则直接返回错误,不会触发后续PatternCheck分组的@Pattern校验
  • 只有BlankCheck校验通过后,才会执行PatternCheck分组的格式校验

这样就能实现空白值仅返回缺失错误,非空白无效值返回格式错误的需求。

内容的提问来源于stack exchange,提问作者Mark Antony

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:45:42