我正在研究一种基于注释的方法,用于使用spring模块验证Spring
bean 。在本教程中,以以下bean(省略了getter和setters)为例:
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 [not.blank] =请输入您的电子邮件地址。
Person.email [email] =请输入有效的电子邮件地址。
Person.email [length] =请输入不超过{2}个字符。
实际上,文档声称可以为特定规则(例如,@ Email)配置默认消息,如下所示:
email=email address is invalid
如果找不到针对该规则的特定于Bean的消息,则应使用此默认消息。但是,我的经验是,这根本行不通。
避免重复消息的另一种机制是将错误消息的密钥传递给规则注释。例如,假设我为@Email规则定义了以下默认错误消息
badEmail=Email address is invalid
如果我这样注释相关属性,则应使用此消息:
@Email(errorCode="badEmail")
private String email;
但是我一遍又一遍地尝试了一下,但似乎没有用。有没有人找到使用该验证框架时避免重复出现错误消息的方法?
我快速浏览了BeanValidator
API
,看起来您可能想尝试
errorCodeConverter 属性。
您是否需要实现自己的ErrorCodeConverter或使用提供的实现之一?
....
<bean id="validator" class="org.springmodules.validation.bean.BeanValidator"
p:configurationLoader-ref="configurationLoader"
p:errorCodeConverter-ref="errorCodeConverter" />
<bean id="errorCodeConverter" class="contact.MyErrorCodeConverter" />
....
注意:configurationLoader是本教程中使用的config XML中定义的另一个bean。
转换器示例:
package contact;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springmodules.validation.bean.converter.ErrorCodeConverter;
public class MyErrorCodeConverter implements ErrorCodeConverter {
private Log log = LogFactory.getLog(MyErrorCodeConverter.class);
@Override
public String convertPropertyErrorCode(String errorCode, Class clazz, String property) {
log.error(String.format("Property %s %s %s", errorCode, clazz.getClass().getName(), property));
return errorCode; // <------ use the errorCode only
}
@Override
public String convertGlobalErrorCode(String errorCode, Class clazz) {
log.error(String.format("Global %s %s", errorCode, clazz.getClass().getName()));
return errorCode;
}
}
现在,属性应该可以工作了:
MyEmailErrorCode=Bad email
class Foo {
@Email(errorCode="MyEmailErrorCode")
String email
}
本文向大家介绍SpringMVC基于注解的Controller详解,包括了SpringMVC基于注解的Controller详解的使用技巧和注意事项,需要的朋友参考一下 概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能。现在你无须让 Controller 继承任何接口,无需在 XML 配置文件中定义请求和
主要内容:运行项目是一种通知类型,可以确保在方法抛出异常时运行一个通知。 以下是通知的语法: 语法 在上面的语法示例中 - - 如果方法返回成功,则将函数标记为在切入点覆盖的方法之前执行的通知。 - 将函数标记为切入点 - 将函数标记为在切入点覆盖的方法之后执行的通知。 - 涵盖应用通知的方法的表达式。 - 返回的异常名称。 要了解上面提到的通知相关的概念,我们写一个Spring AOP基于注解的应用例子,它将使用
Spring Data Elasticsearch repository可以通过XML配置,也可以通过JavaConfig的注解配置。 Example 35. Spring Data Elasticsearch repositories using JavaConfig(使用JavaConfig) @Configuration @EnableElasticsearchRepositories(ba
我有以下问题,有一个常规的spring模型(我们称之为“a”),带有一些与验证相关的注释。接下来是一个命令对象(定义一些字段的常规POJO类,其中一个是类型a的对象)。command对象实现了Validator接口,以使绑定和验证在控制器方法中工作。 问题是,如何在命令对象内部使用注释配置的验证(因为它实现了Validator接口,所以它有supports()和validate()方法)。 我试图
主要内容:运行项目是一种通知类型,可确保在方法执行后运行通知。 以下是通知类的语法: 语法 在上面的语法示例中 - - 将函数标记为切入点 - 将函数标记为在切入点覆盖的方法之后执行的通知。 - 涵盖应用通知的方法的表达式。 要了解上面提到的通知()相关的概念,我们写一个Spring AOP基于注解的应用例子,它将使用基于注解配置实现通知。打开并使用Eclipse IDE,并按照以下步骤创建一个Spring应用程序
主要内容:运行项目是一种通知类型,可以确保在方法执行之前运行通知。 以下是通知()的语法: 语法 在上面的语法示例中 - - 将函数标记为切入点 - 将函数标记为在切入点覆盖的方法之前执行的通知。 - 涵盖应用通知的方法的表达式。 要了解上面提到的连接点()和切入点()相关的概念,我们写一个Spring AOP基于注解的应用例子,它将使用基于注解配置实现通知。打开并使用Eclipse IDE,并按照以下步骤创建一个