Java 验证:无法在验证消息中插入字段名称

Java validation: Cannot interpolate field name in validation message

我尝试了 中提到的方法,但无法将其应用于以下情况。

@Data
public class CompanyRequest {

    @PositiveOrZero(message = "validation.amount.positiveOrZero")
    int quantity;

    // code omitted for brevity

}

这是我的 *.properties 文件,其中包含消息:

validation.amount.positiveOrZero=The ${fieldName} value must be positive or zero

那么,如何在验证消息中使用 属性 名称?

${fieldName} 如果不对进行评估的核心机制进行重大修改,则无法在注释中轻松检索。

考虑到每个字段的名称都不同,实现您想要的更简单的方法如下。

在属性文件中放入 属性

validation.amount.positiveOrZero= value must be positive or zero

然后在代码中定义注解为

@PositiveOrZero(message = "The quantity {validation.amount.positiveOrZero}")
int quantity;

编辑: 属性 似乎不应该在一个简单的 application.properties 文件中定义,而应该在类路径中另一个名为 ValidationMessages.properties 的文件中定义。

如文档所述here

setValidationMessageSource(MessageSource messageSource) Specify a custom Spring MessageSource for resolving validation messages, instead of relying on JSR-303's default "ValidationMessages.properties" bundle in the classpath.