Java 有没有办法使用JSR-303(hibernate)注释并使用{0}{1}语法修改消息?

Java 有没有办法使用JSR-303(hibernate)注释并使用{0}{1}语法修改消息?,java,spring,bean-validation,Java,Spring,Bean Validation,有没有办法使用JSR-303(hibernate)注释并使用{0}{1}语法修改消息?似乎使用Spring验证器可以得到以下结果: 字符串args[]={“标记”、“是”、“酷”} ValidationUtils.rejectIfEmptyOrWhitespace(错误,“aboutYou”,“aboutYou.required”,args) 所以我可以更改消息。但是,如果使用注释,则无法使用消息参数。我知道可以使用有限的参数(min、max等),但我们想做一个通用语句并添加一些文本 爪哇: @

有没有办法使用JSR-303(hibernate)注释并使用{0}{1}语法修改消息?似乎使用Spring验证器可以得到以下结果:

字符串args[]={“标记”、“是”、“酷”}
ValidationUtils.rejectIfEmptyOrWhitespace(错误,“aboutYou”,“aboutYou.required”,args)

所以我可以更改消息。但是,如果使用注释,则无法使用消息参数。我知道可以使用有限的参数(min、max等),但我们想做一个通用语句并添加一些文本

爪哇: @NotEmpty(message=“validation.name.required”) 私有字符串名称

性质 validation.name.required={0}是必需的

输出:

Testing param 7

全名是必需的。

因为您似乎正在使用Spring,这可能会有帮助:

如果要将注释参数化为带有{0}{1}的消息,还可以从ConstraintViolation-Object(javax.validation.Validator.validate(Object)-方法返回一个集>)和.getConstraintDescriptor.getAttributes()获取注释参数(如@Size的最小和最大注释值)等等-表示法(例如,对于@Size,数字可能不是0和1,我手头没有代码,但我似乎记得getAttributes返回的映射中“中间”有一些其他数据)

请注意,在我的例子中,我使用了编程验证(从validation.buildDefaultValidatorFactory().getValidator()获取Validator对象,并使用它验证带有JSR-303-注释的对象),从ConstraintViolations集合中提取了所需的数据(如果集合不为空),将数据放入自定义异常类并将其抛出服务,一直到org.springframework.web.servlet.HandlerExceptionResolver-实现,该实现将从异常对象收集本地化键和消息参数,并通过MessageSource对消息进行本地化,因此,这可能不是您想要的。在您的界面中:

public @interface Test{

    int value() default 7;

    String message() default "{MESSAGE}";    
}
在您的消息文件中:

MESSAGE=Testing param {value}
输出:

Testing param 7
正如发现的那样,它也适用于不使用hibernate的验证程序