springmvc使用hibernate-validator校验器

一、引入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;
        }
        ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值