-
注解式数据验证
Spring3 开始支持JSR-303 验证框架,JSR-303 支持XML 风格的和注解风格的验证,接下来我们首先看一下如何和Spring集成。
1、添加jar 包:
此处使用Hibernate-validator 实现(版本:hibernate-validator-4.3.0.Final-dist.zip),将如下jar 包添加到classpath(WEB-INF/lib 下即可):
validation-api-1.0.0.GA.jar JSR-303 规范API 包
hibernate-validator-4.3.0.Final.jar Hibernate 参考实现
2、配置中添加对JSR-303验证框架的支持
<!--以下validator ConversionService在使用mvc: annotation-driven 会自动注册--><bean id="validator"class="org.springframework. validation. beanvalidation.LocalValidatorFactoryBean"> <property name="providerClass" value="org. hibernate. validator. HibernateValidator"/> <! --如果不加默认到使用classpath下的ValidationMessages.properties--> <property name="validationMessageSource" ref="messageSource"/> </bean>
validationMessageSource属性:指定国际化错误消息从哪里取,此处使用之前定义的messageSource来获取国际化消息;如果此处不指定该属性,则默认到classpath下的ValidationMessages.properties取国际化错误消息。
通过ConfigurableWebBindingInitializer注册validator:<bean id="webBindingInitializer"class="org.springframework. web.bind. support.ConfigurableWebBindingInitializer"> <property name="conversionService" ref="conversionService"/> <property name="validator" ref="validator"/> </bean>
3、在Spring配置中添加message配置
<bean id="messageSource“ class="org.springframework. context.support.ReloadableResourceBundleMessageSource"> <property name="basename" value="classpath: messages"/> <property name="fileEncodings" value="utf-8"/> <property name="cacheSeconds" value="120"/> </bean>
4、创建Model
public class UserModel{ @NotNull(message="{username.not. empty} ") private String username; }
通过@NotNull指定此username字段不允许为空,当验证失败时将从之前指定的messageSource中获取“username.not. empty” 对应的错误信息,此处只有通过“{错误消息键值} ” 格式指定的才能从messageSource获取。
5、Controller@Controller public class HelloWorldController{@RequestMapping("/validate/hello") public String validate(@Valid@ModelAttribute("user")UserModeluser, Errors errors){ if(errors. hasErrors() ) { return "validate/error"; } return "redirect: /success"; } }
通过在命令对象上注解@Valid来告诉Spring MVC此命令对象在绑定完毕后需要进行JSR-303验证,如果验证失败会将错误信息添加到errors错误对象中。 -
内置的数据验证注解
验证注解 验证的数据类型 说明 @AssertFalse Boolean,boolean 验证注解的元素值是false @AssertTrue Boolean,boolean 验证注解的元素值是true @NotNull 任意类型 验证注解的元素值不是null @Null 任意类型 验证注解的元素值是null @Min(value=值) BigDecimal,BigInteger, byte,short, int, long,等任何Number 或CharSequence(存储的是数字)子类型 验证注解的元素值大于等于@Min 指定的value 值 @Max(value=值) 和@Min 要求一样 验证注解的元素值小于等于@Max 指定的value 值 -
错误的消息处理
来源:oschina
链接:https://my.oschina.net/u/2248484/blog/1553058