上一章,我们学习了SpringMVC的自定义类型转换器,但是如果转换后的数据传递到Controller的方法中,忽然发现有某些属性为Null了,这怎么办?我们需要一种有效的数据校验机制,来对数据进行有效的校验。

一、什么是数据校验?

数据校验,顾名思义,就是对数据进行校验,比如在进行登录操作时,我们就需要对用户名和密码进行验证,最起码需要保证用户名和密码不能为空,其次还需要保证密码的长度在多少位之内,这就叫作数据校验。

数据校验分为客户端和服务端两种:

1、客户端校验:JS校验。

2、服务端校验:SpringMVC的validation、Struts的validation,都有自己的校验机制。

二、开发准备

1、添加JAR包

hibernate-validator-5.1.2.Final.jar

validation-api-1.1.0.Final.jar

2、MAVEN的话,需要引入以下依赖

<!-- jsr303 validation dependencies-->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>${javax.validation.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate.validator.version}</version>
</dependency>

3、在spring-servlet.xml.xml中配置validator校验器

<!-- 校验器,配置validator -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
<property name="validationMessageSource" ref="validationMessageSource"></property>
</bean> <!-- 配置validationMessageSource -->
<bean id="validationMessageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!-- 指定校验信息的资源文件的基本文件名称,不包括后缀,后缀默认是properties -->
<property name="basenames">
<list>
<value>classpath:validation</value>
</list>
</property>
<!-- 指定文件的编码 -->
<property name="fileEncodings" value="utf8"></property>
<!-- 对资源文件内容缓存的时间,单位秒 -->
<property name="cacheSeconds" value="120"></property>
</bean>

4、将校验器注册到适配器中

方法一(推荐,如果大家用的是注解式编程,推荐使用该方法):

<mvc:annotation-driven validator="validator" />

方法二(如果大家使用非注解式变成,则可以按以下配置方法)

<!-- 自定义WebBinding -->
<bean id="myWebBinding" class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
<property name="validator" ref="validator" />
</bean> <!-- 适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="webBindingInitializer" ref="myWebBinding" />
</bean>

5、validation.properties

在src/main/resources下创建validation.properties文件,该配置文件的作用就是存校验失败的提示信息,如下:

user.username.notnull=用户名不能为空
user.password.notnull=密码不能为空
user.password.size=密码长度必须为6-16位

三、具体开发

1、创建实体SysUser.java,并指定校验规则

package cn.itechyou.entity;

import java.io.Serializable;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size; public class SysUser implements Serializable {
@NotNull(message = "{user.username.notnull}")
private String username;
@NotNull(message = "{user.password.notnull}")
@Size(min = 6, max = 16, message = "{user.password.size}")
private String password; //省略getter、setter
}

注意:

1:{user.username.notnull}和{user.password.size}就是读取validation.properties配置文件中配置的信息。

2:使用注解对需要进行校验的属性进行绑定,而能够使这些注解生效的前提就是配置此前的几个步骤

2、在Controller中使用

package cn.itechyou.controller;

import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping; import cn.itechyou.entity.SysUser; @Controller
@RequestMapping("/user")
public class UserController { /**
* 登录
* @param model
* @param user
* @param result
* @return
*/
@RequestMapping("/login")
public String login(Model model,@Validated SysUser user,BindingResult result) {
if(result.hasErrors()) {
List<ObjectError> allErrors = result.getAllErrors();
for (ObjectError objectError : allErrors) {
System.out.println(objectError.getDefaultMessage());
}
model.addAttribute("errors", allErrors);
return "login";
}
return "success";
}
}

注意:@Validated作用是使SysUser类中的的注解生效,如果没有该注解,SysUser类中的注解则不会生效。BindingResult对象用来获取校验失败的信息(@NotNull中的message),与@Validated注解必须配对使用,一前一后。

四、运行结果

总结:其实使用起来还是很简单的,校验都为我们写好了,我们只需要使用注解配置上就好了。

《SpringMVC从入门到放肆》十三、SpringMVC数据校验的更多相关文章

  1. 《SpringMVC从入门到放肆》十五、SpringMVC之上传文件

    上一篇我们学习了数据分组校验,已经可以灵活的在项目中进行数据校验了,今天来学习SpringMVC的上传文件功能.相对来说SpringMVC的上传功能,还是比较简单的. 一.添加依赖 <depen ...

  2. 《SpringMVC从入门到放肆》十四、SpringMVC分组数据校验

    上一篇我们学习了数据校验,但是在实际项目中,还是有些不够灵活,今天我们就来继续学习一种更灵活的数据校验方法——分组数据校验. 一.什么是分组校验 校验规则是定义在实体中的,而同一个实体可以被多个Con ...

  3. 《SpringMVC从入门到放肆》十一、SpringMVC注解式开发处理器方法返回值

    上两篇我们对处理器方法的参数进行了分别讲解,今天来学习处理器方法的返回值. 一.返回ModelAndView 若处理器方法处理完后,需要跳转到其它资源,且又要在跳转资源之间传递数据,此时处理器方法返回 ...

  4. 《SpringMVC从入门到放肆》九、SpringMVC注解式开发(简单参数接收)

    上一篇我们学习了注解式开发的配置方式并写了一个小Demo跑起来.今天我们来学习注解开发的参数接收.处理器方法中的常用参数有五类,这些参数会在系统调用时由系统自动赋值,即程序员可以在方法中直接使用.具体 ...

  5. 《SpringMVC从入门到放肆》七、模型与视图ModelAndView

    上一篇我们了解了开发一个Controller的4种方法,如果不记得的朋友可以看看上一篇博文,今天我们来继续了解SpringMVC的模型与视图ModelAndView. 一.什么是Model? Mode ...

  6. 《SpringMVC从入门到放肆》一、概述

    一.SpringMVC概述 View Service Dao DB Spring MVC interface interface Mysql impls impls SpringMVC也叫Spring ...

  7. 《SpringMVC从入门到放肆》二、SpringMVC的执行流程及默认配置

    上一篇博文我们做了一个hello world的程序,并且已经成功的跑起来了.这一篇我们来深入的了解一下SpringMVC的执行流程以及一些其它的配置. 一.执行流程 来解释一下上图中的各个名词1.Di ...

  8. 《SpringMVC从入门到放肆》三、DispatcherServlet的url-pattern配置详解

    上一篇我们详细解释了一下SrpingMVC的执行流程以及一些默认的配置,在Spring的思想中,就是默认大于配置.今天我们来详细的研究一下DispatcherServlet的url-pattern配置 ...

  9. 《SpringMVC从入门到放肆》四、SpringMVC配置式开发(处理器映射器)

    上一篇我们讲解了DispatcherServlet的url-pattern配置详解,今天我们来真正对SpringMVC进行配置式开发.所谓配置式开发是指“处理器类是程序员自己定义的.实现了特定接口的类 ...

随机推荐

  1. 423 重温Java Script and jQuery 葵花宝典 Bootstrap

    Bootstrap需要引的三个文件 <link rel="stylesheet" href="css/bootstrap.css">    表格元素 ...

  2. Beans 自动装配

    http://wiki.jikexueyuan.com/project/spring/beans-auto-wiring/spring-autowiring-byname.html

  3. 【easy】479. Largest Palindrome Product

    Find the largest palindrome made from the product of two n-digit numbers Since the result could be v ...

  4. 【easy】653. Two Sum IV - Input is a BST

    BST树求得两个节点的和是target //因为是BST所以中序遍历得到的是递增数组 //这个题的方法就是在一个递增数组中找到两个数的和相加是目标结果 /** * Definition for a b ...

  5. pwnable.tw start&orw

    emm,之前一直想做tw的pwnable苦于没有小飞机(,今天做了一下发现都是比较硬核的pwn题目,对于我这种刚入门?的菜鸡来说可能难度刚好(orz 1.start 比较简单的一个栈溢出,给出一个li ...

  6. PostMan如何做Post请求测试

    首先要下载 一个Postman的软件,我这里没有下载地址,据说要翻 墙 下面是使用postman模拟post请求的步骤 我这里请求的API地址和请求的参数都是乱填写的,使用的时候请自行替换你们需要的A ...

  7. 搭建Linux运行环境-虚拟机

    1.虚拟机软件介绍 虚拟机(Virtual Machina)软件就是一套特殊的软件,它可以作为系统独立运行,也可以运行与系统之上. 若是运行与系统之上的虚拟机软件,在一台电脑(PC或笔记本等)上安装虚 ...

  8. SQL baseline_11g

    conn sh/sh--执行想要创建基线的语句,语句的执行计划将会被缓存set autotrace on select /*ghbaselines1*/ count(*) from customers ...

  9. 2小程序canvas使用,及一些坑,以及自己的一些小总结

    自己做了一个小程序,主要用于给头像加图标的那种,和qq似的,主要用canvas做的, 第一回用,掉了很多坑,所以今天总结一下自己所做的,如果大家有不理解的地方,欢迎提问:如果帮到大家的话,帮忙点个啥的 ...

  10. flex布局学习

    教程来自阮一峰的flex布局教程实例篇 容器五大属性: flex-direction:容器内项目的排列方向 (1)row:横向从左往右排列(默认) (2)row-reverse:横向从右往左排列 (3 ...