基于注释的春豆验证
我正在研究一种基于注释的方法来验证使用弹簧模块的Spring Bean。在本教程中,使用以下 bean(省略 getters 和 setter)作为示例:
public final class User {
@NotBlank
@Length(max = 80)
private String name;
@NotBlank
@Email
@Length(max = 80)
private String email;
@NotBlank
@Length(max = 4000)
private String text;
}
如果不遵守特定验证规则,则使用的错误消息应遵循以下格式:
bean-class.bean-propery[validation-rule]=Validation Error message
上面显示的类的示例包括:
User.email[not.blank]=Please enter your e-mail address.
User.email[email]=Please enter a valid e-mail address.
User.email[length]=Please enter no more than {2} characters.
消息键包含类名的事实带来了几个问题:
- 如果重命名类,则还需要更改消息键
-
如果我有另一个类(例如Person)的电子邮件属性与 User.email 验证相同,我需要复制消息,例如
Person.email[not.blank]=请输入您的电子邮件地址。
Person.email[email]=请输入有效的电子邮件地址。
Person.email[长度]=请输入不超过 {2} 个字符。
实际上,文档声称可以为特定规则(例如@Email)配置默认消息,如下所示:
email=email address is invalid
如果找不到规则的特定于 Bean 的消息,则应使用此默认消息。但是,我的经验是,这根本行不通。
避免重复消息的另一种机制是将错误消息的密钥传递给规则注释。例如,假设我已为@Email规则定义了以下默认错误消息
badEmail=Email address is invalid
如果我像这样注释相关属性,则应使用此消息:
@Email(errorCode="badEmail")
private String email;
然而,我尝试了这个,一次又一次,它似乎不起作用。有没有人找到一种方法来避免在使用此验证框架时重复错误消息?