数据校验是每个项目中必不可少的模块,Spring MVC 提供了两种数据校验的组件:

  • 基于 Validator 接口进行校验
  • 使用 Annotation JSR-303 标准校验

使用基于 Validator 接口进行校验会复杂一些,具体的数据校验的规则需要开发者手动设置。而使用 Annotation JSR-303 标准会相对简单一些,开发者不需要编写校验规则,直接通过注解的形式给每一条数据添加校验规则,具体操作是直接在实体类的属性上添加对应的校验注解即可。

一、基于 Validator 接口

1、创建实体类

import lombok.Data;@Data
public class Person {private String name;private String password;
}

2、自定义数据校验器 PersonValidator,实现 Validator 接口,重写接口的抽象方法,加入校验规则。

public class PersonValidator implements Validator {@Overridepublic boolean supports(Class<?> clazz) {return Person.class.equals(clazz);}@Overridepublic void validate(Object target, Errors errors) {ValidationUtils.rejectIfEmpty(errors,"name", null, "姓名不能为空");ValidationUtils.rejectIfEmpty(errors, "password", null, "密码不能为空");}
}

3、控制层业务方法

package com.southwind.controller;import com.southwind.pojo.Person;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
@RequestMapping("/validate")
public class PersonController {@GetMapping("/login")public String login(Model model){model.addAttribute(new Person());return "login";}@PostMapping("/login")public String login(@Validated Person person, BindingResult bindingResult){if(bindingResult.hasErrors()){return "login";}return "success";}
}

4、springmvc.xml 配置 Validator

<bean id="personValidator" class="com.southwind.validator.PersonValidator"></bean>
<mvc:annotation-driven validator="personValidator"></mvc:annotation-driven>

5、login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<head><title>Title</title>
</head>
<body>
<h1>用户登录</h1>
<form:form modelAttribute="person" action="/validate/login" method="post">姓名:<form:input path="name"></form:input><form:errors path="name"></form:errors><br>密码:<form:input path="password"></form:input><form:errors path="password"></form:errors><br><input type="submit" value="提交">
</form:form>
</body>
</html>

success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h1>success</h1>
</body>
</html>

6、页面效果

7、处理流程

二、Annotation JSR-303 标准

Hibernate Validator,通过注解完成校验规则的绑定。

  • @Null 只能为 null
  • @NotNull 不能为 null
  • @Size 设置数据长度
  • @NotEmpty 不能为空

1、pom.xml

<!--JSR-303--><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.3.6.Final</version></dependency><dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>2.0.1.Final</version></dependency><dependency><groupId>org.jboss.logging</groupId><artifactId>jboss-logging</artifactId><version>3.4.1.Final</version></dependency>

2、创建实体类,通过注解的方式给属性指定校验规则

import lombok.Data;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;@Data
public class Account {@NotEmpty(message = "用户名不能为空")private String username;@Size(min = 6, max = 20,message = "密码长度为6-20位")private String password;@Email(regexp = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\\\\\\\.[a-zA-Z0-9-]+)*\\\\\\\\.[a-zA-Z0-9]{2,6}$",message = "请输入正确的邮箱")private String email;@Pattern(regexp = "^1(3\\d|4[5-8]|5[0-35-9]|6[567]|7[01345-8]|8\\d|9[025-9])\\d{8}$", message ="请输入正确的电话格式")private String phone;}

3、业务方法

import com.southwind.pojo.Account;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;import javax.validation.Valid;@Controller
@RequestMapping("/account")
public class RegisterController {@GetMapping("/register")public String register(Model model){model.addAttribute(new Account());return "register";}@PostMapping("/register")public String register(@Valid Account account, BindingResult bindingResult){if(bindingResult.hasErrors()){return "register";}return "success";}
}

4、springmvc.xml

 <mvc:annotation-driven></mvc:annotation-driven>

5、register.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<head><title>Title</title>
</head>
<body><h1>用户注册</h1><form:form action="/account/register" modelAttribute="account" method="post">用户名:<form:input path="username"></form:input><form:errors path="username"></form:errors><br>密码:<form:input path="password"></form:input><form:errors path="password"></form:errors><br>邮箱:<form:input path="email"></form:input><form:errors path="email"></form:errors><br>电话:<form:input path="phone"></form:input><form:errors path="phone"></form:errors><br><input type="submit" value="提交"></form:form>
</body>
</html>

Spring MVC 数据校验相关推荐

  1. 基于佟刚老师视频教程的Spring MVC数据类型转换学习总结

    基于Spring MVC数据类型转换的学习笔记总结 问题 页面中数据格式为字符串格式,后台pojo中对应的类型可能为另外一种对象. 如: 在前台页面输入一个固定格式的时间字符串,在后台接收为一个jav ...

  2. 【Spring】掌握 Spring Validation 数据校验

    个人简介:Java领域新星创作者:阿里云技术博主.星级博主.专家博主:正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Spring Validati ...

  3. Spring MVC数据验证

    文章目录 客户端验证 服务器端验证 自定义 Spring 验证器 Validator接口 ValidationUtils 类 Spring MVC验证器应用实例 JSR 303 验证 Hibernat ...

  4. Spring Boot数据校验

    数据校验是一个相当重要的环节,使用Spring Boot 进行数据校验. 添加校验依赖 全部依赖文件如下 <?xml version="1.0" encoding=" ...

  5. Spring MVC数据验证简介

    用户的输入一般是随意的,为了保证数据的合法性,数据验证是所有 Web 应用必须处理的问题. 在 Spring MVC 框架中有以下两种方法可以验证输入数据: 利用 Spring 自带的验证框架. 利用 ...

  6. Spring Mvc 数据回显、异常处理、文件上传、json交互、ResTful、拦截器的使用(高级三)

    1,数据回显 SpringMvc包含三种数据回显机制 第一种:对于简单数据类型,如:Integer.String.Float等使用Model将传入的参数再放到request域实现显示. (回顾jsp四 ...

  7. Spring MVC 数据验证——validate注解方式

    1.说明 学习注解方式之前,应该先学习一下编码方式的spring注入.这样便于理解验证框架的工作原理.在出错的时候,也能更好的解决这个问题.所以本次博客教程也是基于编码方式.仅仅是在原来的基础加上注解 ...

  8. Spring MVC——数据检验步骤

    1. 搭建web工程 2. 导入jar包 spring-beans.jar.spring-context.jar.spring-core.jar.spring-expression.jar.sprin ...

  9. Spring MVC 参数校验

    Spring 4 以上支持JSR303校验API.所以必须要Spring4. 我用Spring boot,所以引入 <dependency><groupId>org.sprin ...

最新文章

  1. 从十个方面提升SharePoint网站性能
  2. webpack/gulp的z-index被改写
  3. numpy 创建加一行_数据科学|可视化图解Python科学计算包Numpy
  4. 牛客练习赛25 因数个数和
  5. STL模板整理 set
  6. 2-1 nodejs和npm的安装和环境搭建
  7. vue click事件_vue指令用法
  8. dataframe建一个空的,创建一个空的Pandas DataFrame,然后填充它?
  9. solr 配置中文分词器
  10. 【转】超酷的 mip-infinitescroll 无限滚动(无限下拉)
  11. nmap扫描ipv6端口_Flan Scan:Cloudflare开源的轻量级网络漏洞扫描程序
  12. 设计灵感|排版太死板?提高品质的角度很重要
  13. 新的一年,谈谈我对技术架构的理解
  14. 提示框几秒消失比较好_移动设计提示框介绍-《产品日常笔记》
  15. 机械设计(机电)_简要问答_复习笔记
  16. 适合入门的linux教程,Linux入门记录系列教程,适合Linux初学者阅读
  17. jquery timepicker
  18. 感应加热电源-谐振移相-感性移相
  19. 金山云CDN:国内最佳付费CDN
  20. Android O 自定义prop的问题小总结

热门文章

  1. templete中使用v-for
  2. 使用stm32f103c8实现一个简单的运动会计时器
  3. Sql 中 不等于''与 NULL
  4. ubuntu 安装 音视频解码器
  5. 基于springboot的农产品销售管理系统/电商项目/水果超市管理系统/微信小程序毕设/农村电商资源对接平台【附源码】
  6. 共享车位停车数据 共享停车管理平台,共享车位解决停车问题!
  7. 南大计算机专业考研2019分数,2021南京大学研究生分数线是多少
  8. 为何有些云比其他云更可信
  9. 字典序法的matlab,算法:字典序排序
  10. R语言实用案例分析-1