“初学者的心充满各种可能性,老手的却不多”
本文提纲
1 spring-boot-starter-validation 依赖概述
1.1 spring-boot-starter-validation 职责
1.2 spring-boot-starter-validation 依赖关系
2 运行 spring-boot-validating-form-input 表单验证工程
3 详解 spring-boot-validating-form-input
4 小结
一、 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 表单验证工程
- git clone 下载工程 spring-boot-core-book-demo
- Maven 编译安装这个工程:
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)
访问 http://localhost:8080/users 用户列表页面:
点击创建用户按钮,打开用户管理页面:
输入非法值提示:
三、 详解 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 {
@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 控制层代码如下:
在新增和更新用户时,我们会对表单进行验证,那么首先用 @Valid 注解到实体类,使实体类 User 中验证注解生效,然后我们介绍下 BindingResult ,是数据绑定的结果对象,从源码中可以看出,其继承了 Errors 接口,所以所有的错误信息都会被绑定到这个对象。
通过 hasErrors() 方法判断是否有错误信息,如果有返回原页面,并展示错误信息。
欢迎大家和我一起学习Spring Boot构建微服务云架构,我这边会将近期研发的Spring Boot微服务云架构的搭建过程和精髓记录下来,帮助更多有兴趣研发Spring Boot框架的朋友,大家来一起探讨Spring Boot架构的搭建过程及如何运用于企业项目。
我本人邀约各大BATJ架构大牛共创Spring Boot构建微服务架构的交流社区。 (群号:364677697)欢迎各路架构师、开发者,学习与交流使用Spring Boot诸多强大组件的实战经验。
为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!
合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!
希望此文能帮到大家的同时,也听听大家的观点。欢迎留言讨论,加关注,分享你的高见!持续更新!
To-陌霖Java架构
复制代码
分享互联网最新文章 关注互联网最新发展