一、引入hibernate-validator
<!-- hibernate-validator -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${org.hibernate.version}</version>
</dependency>
<!-- /hibernate-validator -->
二、添加到spring配置文件
<!--校验器 -->
<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>
<!-- 校验错误信息配置文件 -->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!-- 资源文件名 -->
<property name="basenames">
<list>
<value>classpath:config/validationMessages</value>
</list>
</property>
<!-- 资源文件编码格式 -->
<property name="fileEncodings" value="utf-8" />
<!-- 对资源文件内容缓存时间,单位秒 -->
<property name="cacheSeconds" value="120" />
</bean>
三、validationMessages.properties配置错误提示信息,如下:
#hibernate validation error message configuration file
ChMenu.menuId.NotNull=ChMenu menuId is Not Null
ChMenu.menuId.Size=ChMenu menuId Size Overflow, Max length 32
ChMenu.menuName.Size=ChMenu menuName Size Overflow, Max length 32
四、在实体类中属性上添加注解
groups表示自定义的分组
public class ChMenu extends AbstractPersistentModel implements CycleRecoverable{
private static final long serialVersionUID = 713065966926634413L;
@NotNull(message="{ChMenu.menuId.NotNull}",groups={ValidGroupUpdate.class})
@Size(max=32,message="{ChMenu.menuId.Size}",groups={ValidGroupSave.class})
private String menuId;
public String getMenuId(){
return menuId;
}
public void setMenuId(String menuId){
this.menuId=menuId;
}
@Size(max=32,message="{ChMenu.menuName.Size}",groups={ValidGroupSave.class})
private String menuName;
public String getMenuName(){
return menuName;
}
public void setMenuName(String menuName){
this.menuName=menuName;
}
...
五、校验器分组
ValidGroupUpdate
/**
* 接口不需要定义任何方法,仅是对不同的校验规则进行分组
* 此分组校验用于修改的数据
* @author CHHUANG
*
*/
public interface ValidGroupUpdate {
}
ValidGroupSave
/**
* 接口不需要定义任何方法,仅是对不同的校验规则进行分组
* 此分组校验用于保存的数据
* @author CHHUANG
*
*/
public interface ValidGroupSave {
}
六、在controller中使用校验器,校验用户提交过来的数据
使用@Validated注解对menu进行校验,value中填写分组接口,后面紧跟着BindingResult,校验器与绑定结果一一对应。
/**
* 添加或修改菜单信息
* @param menu
* @return
* @throws Exception
*/
@RequestMapping(value="/editMenu/{roleIds}",method=RequestMethod.POST)
@ResponseBody
public Object editMenu(@RequestBody @Validated(value={ValidGroupSave.class}) ChMenu menu, BindingResult bindingResult,
@PathVariable String roleIds) throws Exception{
JSONObject json = new JSONObject();
if(bindingResult.hasErrors()){
json.put(SysConstants.Status.SUCCESS, false);
json.put(SysConstants.Status.RESULT, bindingResult.getAllErrors().get(0).getDefaultMessage());
log.debug(json.toString());
return json;
}
...