springmvc服务端校验hibernate validation的配置
步骤如下:
hibernate-validator-4.3.0.Final.jar
jboss-logging-3.1.0.CR2.jar
validation-api-1.0.0.GA.jar
1.在src目录下创建CustomValidationMessages.properties文件(错误描述信息)
2.在pojo中写po中类的属性中写注解,我也就我们的限制条件
class User{
@Size(min=1,max=10,message="{CustomValidationMessages文件中的key字符串}")
private String username;
}
@Size(min=1,max=10)表示这个属性的值长度位1到10
message 中填写的是CustomValidationMessages文件中的key值
注意:message需指定,否则校验失败没有提示信息
3.在Controller的类中的添加注解,已UserController为例子
class UserController{
....
public String save(@Validated User user,BindingResult br){
if(br.hasErrors()){
//如果有错误就会进来
List ls = bindingResult.getAllErrors();
model.addAttribute("error", ls);
return "login";
}
//其他代码
}
}
@Validated User user,BindingResult br
写法固定@Validated Pojo pojo,BindingResult br
ls.get(0).getDefaultMessage()为错误信息
下面写法固定,只需变动的是指定properties文件
<!-- 注解驱动 -->
<mvc:annotation-driven conversion-service="conversionService" validator="validator"/>
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<!-- hibernate校验器-->
<property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
<!-- 指定校验使用的资源文件,在文件中配置校验错误信息,如果不指定则默认使用classpath下的ValidationMessages.properties -->
<property name="validationMessageSource" ref="messageSource" />
</bean>
<!-- 校验错误信息配置文件 -->
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!-- 资源文件名-->
<property name="basenames">
<list>
<value>classpath:CustomValidationMessages</value>
</list>
</property>
<!-- 资源文件编码格式 -->
<property name="fileEncodings" value="utf-8" />
<!-- 对资源文件内容缓存时间,单位秒 -->
<property name="cacheSeconds" value="120" />
</bean>
注解说明:
@AssertTrue //用于boolean字段,该字段只能为true
@AssertFalse//该字段的值只能为false
@CreditCardNumber//对信用卡号进行一个大致的验证
@DecimalMax//只能小于或等于该值
@DecimalMin//只能大于或等于该值
@Digits(integer=2,fraction=20)//检查是否是一种数字的整数、分数,小数位数的数字。
@Email//检查是否是一个有效的email地址
@Future//检查该字段的日期是否是属于将来的日期
@Length(min=,max=)//检查所属的字段的长度是否在min和max之间,只能用于字符串
@Max//该字段的值只能小于或等于该值
@Min//该字段的值只能大于或等于该值
@NotNull//不能为null
@NotBlank//不能为空,检查时会将空格忽略
@NotEmpty//不能为空,这里的空是指空字符串
@Null//检查该字段为空
@Past//检查该字段的日期是在过去
@Size(min=, max=)//检查该字段的size是否在min和max之间,可以是字符串、数组、集合、Map等
@URL(protocol=,host,port)//检查是否是一个有效的URL,如果提供了protocol,host等,则该URL还需满足提供的条件
@Valid//该注解只要用于字段为一个包含其他对象的集合或map或数组的字段,或该字段直接为一个其他对象的引用,
//这样在检查当前对象的同时也会检查该字段所引用的对象