SpringMVC数据验证

SpringMVC中数据验证

1. 配合hibernate-validator.jar包

hibernate-validator.jar依赖于jboss-logging.jar和validation-api.jar,使用Maven引入即可

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.2.4.Final</version>
</dependency>

2. 配置校验器

  • 在springmvc核心文件中注册校验器信息
<!-- 校验器 -->
<bean id="validator"                     class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
    <property name="validationMessageSource" ref="validationSource" />
</bean>

<!-- 校验错误信息配置文件 -->
<!-- value中的文件名不写路径-->
<bean id="validationSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>classpath:spring/ValidationMessages
                </value>
        </list>
    </property>
    <property name="fileEncodings" value="utf-8" />
    <property name="cacheSeconds" value="120" />
</bean>
  • 注入控制器适配器中
<mvc:annotation-driven validator="validator"></mvc:annotation-driven>
  • 自定义错误信息文件,也可以使用org.hibernate.validator包中的自带文件

3. 在pojo中添加校验规则

  • 校验规则添加至对应属性前
@NotBlank(message="{user.username.NotNull}")
private String username;
private char sex;
private String identity;

@NotBlank(message="{user.password.NotNull}")
private String password;
  • 常用的校验规则
注解名 检查规则
@AssertFalse 被注解的元素必须为false
@AssertTrue 被注解的元素必须为true
@DecimalMax(value) 被注解的元素必须为一个数字,其值必须小于等于指定的最小值
@DecimalMin(Value) 被注解的元素必须为一个数字,其值必须大于等于指定的最小值
@Digits(integer=, fraction=) 被注解的元素必须为一个数字,其值必须在可接受的范围内
@Future 被注解的元素必须是日期,检查给定的日期是否比现在晚
@Max(value) 被注解的元素必须为一个数字,其值必须小于等于指定的最小值
@Min(value) 被注解的元素必须为一个数字,其值必须大于等于指定的最小值
@NotNull 被注解的元素必须不为null
@Null 被注解的元素必须为null
@Past(java.util.Date/Calendar) 被注解的元素必须过去的日期,检查标注对象中的值表示的日期比当前早
@Pattern(regex=, flag=) 被注解的元素必须符合正则表达式,检查该字符串是否能够在match指定的情况下被regex定义的正则表达式匹配
@Size(min=, max=) 被注解的元素必须在制定的范围(数据类型:String, Collection, Map and arrays)
@Valid 递归的对关联对象进行校验, 如果关联对象是个集合或者数组, 那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验
@CreditCardNumber 对信用卡号进行一个大致的验证
@Email 被注释的元素必须是电子邮箱地址
@Length(min=, max=) 被注解的对象必须是字符串的大小必须在制定的范围内
@NotBlank 被注解的对象必须为字符串,不能为空,检查时会将空格忽略
@NotEmpty 被注释的对象必须为空(数据:String,Collection,Map,arrays)
@Range(min=, max=) 被注释的元素必须在合适的范围内 (数据:BigDecimal, BigInteger, String, byte, short, int, long and 原始类型的包装类 )
@URL(protocol=, host=, port=, regexp=, flags=) 被注解的对象必须是字符串,检查是否是一个有效的URL,如果提供了protocol,host等,则该URL还需满足提供的条件

4. Controllerh获取错误信息

  • 通过@Validated注解声明校验,BindingResult获取错误信息
    注意被验证变量和BindingResult是一一对应关系
public ModelAndView queryUserByName(@Validated User user,BindingResult bindingResult){
    if (bindingResult.hasErrors()) {
        List<ObjectError> errorList = bindingResult.getAllErrors();
        mv = new ModelAndView();
        mv.addObject("errorList", errorList);
        mv.setViewName("hello");
        return mv;
}

5. 前台信息输出

猜你喜欢

转载自blog.csdn.net/baidu_22153679/article/details/78661307