Spring Boot 表单验证篇
一、 spring-boot-starter-validation 依赖概述
上一篇 《spring boot web 开发注解篇》,就可以快速地进行 web 开发。那么在表单提交的时候,我们需要进行验证。前端验证可以挡住 99% 的小白用户,这里要实现服务端验证。
starters 机制告诉我们,只要加入 spring-boot-starter-validation 这个 starter ,就可以使用其实现验证。那什么是 spring-boot-starter-validation?
spring-boot-starter-validation 就是使用 hibernate validator 框架来提供 java bean 验证功能。
1.1 spring-boot-starter-validation 职责
spring-boot-starter-validation 是一个用于验证的 starter,主要完成的是 java bean 的验证功能。
1.2 spring-boot-starter-validation 依赖关系
spring-boot-starter-validation 依赖的组成如下表:
- spring-boot-starter 核心包,包括了自动化配置支持、日志、yaml 文件解析的支持等。
- tomcat-embed-el tomcat 容器嵌入包
- hibernate-validator hibernate 验证框架包
可见,tomcat 容器是 8.x 版本。这里有个小问题了,为啥 spring-boot-starter-web 也有这些上面这些依赖呢?这样如果开发 web 就不需要重复添加 spring-boot-starter-validation 依赖了。但如果没用 web 依赖时候想要实现 bean 验证,则只要单单加入 spring-boot-starter-validation 依赖即可。
二、 运行 chapter-4-spring-boot-validating-form-input 表单验证工程
1. git clone 下载工程 spring-boot-core-book-demo
项目地址见 github – https://github.com/jeffli1993/spring-boot-core-book-demo:
git clone https://github.com/jeffli1993/spring-boot-core-book-demo.git
2. maven 编译安装这个工程:
cd spring-boot-core-book-demo mvn clean install
3. 运行 chapter-4-spring-boot-validating-form-input 工程
右键项目 validatingforminputapplication 类运行即可:
2017-08-09 16:24:58.387 info 12193 — [ main] o.s.b.w.embedded.tomcat.tomcatwebserver : tomcat started on port(s): 8080 (http) 2017-08-09 16:24:58.395 info 12193 — [ main] s.b.core.validatingforminputapplication : started validatingforminputapplication in 9.846 seconds (jvm running for 11.23)
访问 用户列表页面:
点击创建用户按钮,打开用户管理页面:
输入非法值提示:
三、 详解 spring-boot-validating-form-input
1.pom.xml 如下:
validator 验证依赖主要在 web 依赖中,web 依赖包含了 hibernate-validator 依赖
还有以下依赖:
单元测试依赖
spring data jpa 依赖 :: 数据持久层框架
h2 数据源连接驱动
模板引擎 thymeleaf 依赖
2.实体类
具体业务层逻辑这边不解释,主要还是在控制层和 view 如何展示表单验证
实体类 user 如下:
@entity public class user implements serializable { /** * 编号 */ @id @generatedvalue private long id; /** * 名称 */ @notempty(message = “姓名不能为空”) @size(min = 2, max = 8, message = “姓名长度必须大于 2 且小于 20 字”) private string name; /** * 年龄 */ @notnull(message = “年龄不能为空”) @min(value = 0, message = “年龄大于 0”) @max(value = 300, message = “年龄不大于 300”) private integer age; /** * 出生时间 */ @notempty(message = “出生时间不能为空”) private string birthday; public long getid() { return id; } public void setid(long id) { this.id = id; } public string getname() { return name; } public void setname(string name) { this.name = name; } public integer getage() { return age; } public void setage(integer age) { this.age = age; } public string getbirthday() { return birthday; } public void setbirthday(string birthday) { this.birthday = birthday; } @override public string tostring() { return “user{” + “id=” + id + “, name='” + name + ‘\” + “, age=” + age + “, birthday=” + birthday + ‘}'; } } @entity @id @generatedvalue
以上注解是 jpa 框架提供的,实体类和表建立映射关系的。
bean validation 规范,运行时的数据验证框架。它是 jsr 303 规范,hibernate validator 实现了这套规范,并扩展了一些注解,如下:
@null 被注释的元素必须为 null
@notnull 被注释的元素必须不为 null
@min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@size(max, min) 被注释的元素的大小必须在指定的范围内
@email 被注释的元素必须是电子邮箱地址
@length 被注释的字符串的大小必须在指定的范围内
@notempty 被注释的字符串的必须非空
@range 被注释的元素必须在合适的范围内
3.控制层 usercontroller
usercontroller 控制层代码如下:
/** * 创建用户 * 处理 “/users” 的 post 请求,用来获取用户列表 * 通过 @modelattribute 绑定参数,也通过 @requestparam 从页面中传递参数 */ @requestmapping(value = “/create”, method = requestmethod.post) public string postuser(modelmap map, @modelattribute @valid user user, bindingresult bindingresult) { if (bindingresult.haserrors()) { map.addattribute(“action”, “create”); return “userform”; } userservice.insertbyuser(user); return “redirect:/users/”; } /** * 处理 “/users/{id}” 的 put 请求,用来更新 user 信息 * */ @requestmapping(value = “/update”, method = requestmethod.post) public string putuser(modelmap map, @modelattribute @valid user user, bindingresult bindingresult) { if (bindingresult.haserrors()) { map.addattribute(“action”, “update”); return “userform”; } userservice.update(user); return “redirect:/users/”; }
在新增和更新用户时,我们会对表单进行验证,那么首先用 @valid 注解到实体类,使实体类 user 中验证注解生效,然后我们介绍下 bindingresult ,是数据绑定的结果对象,从源码中可以看出,其继承了 errors 接口,所以所有的错误信息都会被绑定到这个对象。通过 haserrors() 方法判断是否有错误信息,如果有返回原页面,并展示错误信息。
总结
以上所述是小编给大家介绍的spring boot 表单验证篇,希望对大家有所帮助
上一篇: Java排序算法之归并排序简单实现
下一篇: Java实现的简单音乐播放器功能示例
推荐阅读
-
Spring Boot 表单验证篇
-
Spring Boot Web 开发注解篇
-
Kotlin + Spring Boot 请求参数验证的代码实例
-
SpringBoot spring-boot-maven-plugin 打包为可执行Jar方法。(已验证)
-
spring-boot-2.0.3不一样系列之源码篇 - run方法(四)之prepareContext,绝对有值得你看的地方
-
Springboot 系列(一)Spring Boot 入门篇
-
Spring Boot2.0深度实践之核心技术篇|Spring Boot2.0视频教程下载 Spring Boot2.0
-
Spring Boot2.0深度实践之核心技术篇|Spring Boot2.0视频教程下载 Spring Boot2.0
-
Spring Boot 2从入门到入坟 | 底层注解篇:@ConfigurationProperties配置绑定
-
spring boot 和nginx两种跨域处理(已验证)