Java 基于注释的springbean验证
我正在研究一种基于注释的方法来验证SpringBean。在中,以下bean(省略getter和setter)用作示例:Java 基于注释的springbean验证,java,validation,spring-modules,Java,Validation,Spring Modules,我正在研究一种基于注释的方法来验证SpringBean。在中,以下bean(省略getter和setter)用作示例: public final class User { @NotBlank @Length(max = 80) private String name; @NotBlank @Email @Length(max = 80) private String email; @NotBlank @Length(m
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.email[电子邮件]=请输入有效的电子邮件地址。
Person.email[length]=请输入不超过{2}个字符
email=email address is invalid
@Email(errorCode="badEmail")
private String email;
如果找不到规则的特定于bean的消息,则应使用此默认消息。然而,我的经验是,这根本不起作用
避免重复消息的另一种机制是将错误消息的密钥传递给规则注释。例如,假设我为@Email规则定义了以下默认错误消息
badEmail=Email address is invalid
如果我对相关属性进行如下注释,则应使用此消息:
email=email address is invalid
@Email(errorCode="badEmail")
private String email;
然而,我尝试了一次又一次,它似乎不起作用。是否有人找到了在使用此验证框架时避免重复错误消息的方法?我快速查看了,您可能希望尝试errorCodeConverter属性 您需要实现自己的,还是使用提供的实现之一
....
<bean id="validator" class="org.springmodules.validation.bean.BeanValidator"
p:configurationLoader-ref="configurationLoader"
p:errorCodeConverter-ref="errorCodeConverter" />
<bean id="errorCodeConverter" class="contact.MyErrorCodeConverter" />
....
Spring验证确实有一个执行以下操作的ErrorCodeConverter: org.springmodules.validation.bean.converter.KeepAsIsErrorCodeConverter 使用此选项时,将检查资源束中的以下代码: [errorCode.commandBeanName.fieldName,errorCode.fieldName,errorCode.fieldClassName,errorCode]
- errorCode是实际的验证错误代码,例如非空、电子邮件
- commandBeanName与引用 形成支持bean李>
- fieldName是字段的名称李>
- fieldClassName是字段类名,例如java.lang.String、java.lang.Integer
email=email address is invalid
@Email(errorCode="badEmail")
private String email;
@电子邮件(errorCode=“badEmail”)
框架将尝试解析的消息代码为:
[badEmail.formBean.emailAddress、badEmail.emailAddress、badEmail.java.lang.String、badEmail]
我建议保持错误代码不变。因此,一条消息可用于所有与错误代码关联的字段。如果需要更具体地说明某个字段的消息,可以使用代码errorCode.commandBeanName.field将消息添加到资源束。在
applicationContext.xml
文件中添加以下bean
<bean id="configurationLoader"
class="org.springmodules.validation.bean.conf.loader.annotation.AnnotationBeanValidationConfigurationLoader" />
<!-- Use the error codes as is. Don't convert them to <Bean class name>.<bean field being validated>[errorCode]. -->
<bean id="errorCodeConverter"
class="org.springmodules.validation.bean.converter.KeepAsIsErrorCodeConverter"/>
<!-- shortCircuitFieldValidation = true ==> If the first rule fails on a field, no need to check
other rules for that field -->
<bean id="validator" class="org.springmodules.validation.bean.BeanValidator"
p:configurationLoader-ref="configurationLoader"
p:shortCircuitFieldValidation="true"
p:errorCodeConverter-ref="errorCodeConverter"/>
在上面显示的Spring配置中,什么是configurationLoader bean?您好,唐-我从您提到的教程网站下载了源代码,configurationLoader已经是在其配置xml中定义的bean之一。当我回到家并查看我编写的代码时,我可以更新这篇文章。教程中的ConfigurationLoaderbean类型为org.springmodules.validation.bean.conf.loader.annotation.AnnotationBeanValidationConfigurationLoader