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

如何让Jakarta Validation默认验证消息包含字段名称?

解决方案:全局配置验证消息模板,自动包含字段名

你不需要为每个验证注解手动编写自定义消息,通过Bean Validation的全局消息资源配置即可实现所有默认验证消息自动带上字段名,步骤如下:

1. 创建全局消息资源文件

在项目的src/main/resources目录下创建ValidationMessages.properties文件(这是Jakarta Bean Validation指定的默认消息配置文件)。

2. 重写默认验证注解的消息模板

在文件中为需要的验证注解配置包含字段名的消息,使用内置的{propertyPath}表达式变量(该变量会被自动替换为验证失败的字段名称,嵌套对象会包含完整路径,如user.address.address1)。示例配置如下:

# 覆盖@NotNull的默认消息
javax.validation.constraints.NotNull.message = {propertyPath} 不能为空

# 覆盖@Size的默认消息
javax.validation.constraints.Size.message = {propertyPath} 长度必须在 {min} 和 {max} 之间

# 可根据需要添加其他注解的配置,比如@NotBlank、@Min等
javax.validation.constraints.NotBlank.message = {propertyPath} 不能为空且不能仅包含空白字符
javax.validation.constraints.Min.message = {propertyPath} 不能小于 {value}

3. 验证效果

配置完成后,无需修改任何实体/record的验证注解,比如你的Address record:

public record Address(
    @NotNull @Size(max = 50) String address1,
    ...
) {}

当address1长度超过50时,错误消息会自动变为:address1 长度必须在 0 和 50 之间;如果address1为null,错误消息则为:address1 不能为空。

原理说明

Jakarta Bean Validation规范允许通过全局资源文件覆盖默认的验证消息,其中{propertyPath}是规范定义的内置表达式变量,会被验证引擎自动解析为当前验证失败的属性路径。Hibernate Validator作为规范的实现,完全支持该变量的解析,同时还提供了其他可选变量(如{validatedValue}表示被验证的实际值),可根据需求加入消息模板中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:42:08