SpringMVC 学习笔记3 - 数据校验 & 编码过滤器

一、导包

Jar包:
hibernate-validator-4.3.0.Final
jboss-logging-3.1.0.CR2
validation-api-1.0.0.GA

Maven:

二、配置错误信息定义文件springmvc_validate.properties

user.nameIsInvalidate=用户名长度应该在310之间
user.hobbyIsInvalidate=兴趣至少选一个,至多选3

三、配置springmvc.xml文件

<!--错误信息资源-->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <!--资源文件列表-->
    <property name="basenames">
        <list>
            <!-- 注意:这里没有后缀名properties -->
            <value>classpath:springmvc_validate</value>
        </list>
    </property>
    <!--资源文件编码格式-->
    <property name="defaultEncoding" value="utf-8"/>
    <!--对资源文件内容缓存时间-->
    <property name="cacheSeconds" value="120"/>
</bean>
<!--校验器-->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
    <property name="validationMessageSource" ref="messageSource"/>
</bean>
<!--使用校验器-->
<mvc:annotation-driven validator="validator"/>

四、定义校验规则

  1. 在POJO类的属性上添加验证注解
  2. 控制方法的POJO参数注解@Validated,并且后面紧跟一个类型为BindingResult参数

    一个BindingResult对应一个POJO形参,并且需要紧跟在形参后面。
    如果验证失败,通过遍历BindingResult.getAllErrors[i].getDefaultMessage获取错误信息。

验证注解

@Null 被注解的元素必须为null,对于基本类型(如int,float)肯定校验失败
@NotNull 被注解的元素必须不为null,对于基本类型肯定校验成功
@AssertTrue 被注解的元素必须为true
@AssertFalse 被注解的元素必须为false
@Min(int value) 被注解的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(int value) 被注解的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(String value) 被注解的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(String value) 被注解的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max, min) 被注解的集合或字符串的长度必须在指定的范围内,最好用在集合上(如果列表为Null,会跳过该验证)
@Digits(integer,fraction) 被注解的元素必须是一个数字,其整数位数不大于integer,小数位数不大于fraction
@Past 被注解的元素必须是一个过去的日期
@Future 被注解的元素必须是一个将来的日期
@Pattern(regex,flag) 被注解的元素必须符合指定的正则表达式
@NotBlank 被注解的字符串必须非null,且长度大于0,且调用trim()后长度大于0(即要求有内容,不能只有空格)
@Email 被注解的元素必须是电子邮箱地址
@Length(min,max) 被注解的字符串的大小必须在指定的范围内
@NotEmpty 被注解的字符串的必须不为null,且长度大于0
@Range(min,max) 被注解的元素必须在合适的范围内

验证分组

目的是构建业务与验证之间的多对多关系,使得不同的页面对应不同的验证,更加灵活。
例如:注册需要验证user的name,pass,sex,email是否符合要求,登录只需验证name,pass是否为空即可。
如果没有分组,那么注册登录要不就是都验证所有输入的合法性,要不就是都仅仅验证非空,不灵活。

使用:

    1. 定义若干个接口作为分组的标识(接口什么也不用写)
    2. POJO类的相关属性的验证注解的参数groups填上接口
    3. 控制方法的POJO形参的@Validated的参数value填上接口

使用示例

// TODO

五、如果数据是中文,需要定义过滤器

<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>utf-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值