- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Spring Boot 表单验证篇由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1、 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 依赖的组成如下表:
可见,tomcat 容器是 8.x 版本。这里有个小问题了,为啥 spring-boot-starter-web 也有这些上面这些依赖呢?这样如果开发 web 就不需要重复添加 spring-boot-starter-validation 依赖了。但如果没用 web 依赖时候想要实现 Bean 验证,则只要单单加入 spring-boot-starter-validation 依赖即可.
2、 运行 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:
1
|
git clone https:
//github.com/JeffLi1993/spring-boot-core-book-demo.git
|
2. Maven 编译安装这个工程:
1
2
|
cd spring-boot-core-book-demo
mvn clean install
|
3. 运行 chapter-4-spring-boot-validating-form-input 工程 。
右键项目 ValidatingFormInputApplication 类运行即可:
1
2
|
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 用户列表页面:
点击创建用户按钮,打开用户管理页面:
输入非法值提示:
3、 详解 spring-boot-validating-form-input 。
1.pom.xml 如下:
validator 验证依赖主要在 web 依赖中,web 依赖包含了 hibernate-validator 依赖 。
还有以下依赖:
单元测试依赖 。
Spring Data JPA 依赖 :: 数据持久层框架 。
h2 数据源连接驱动 。
模板引擎 Thymeleaf 依赖 。
2.实体类 。
具体业务层逻辑这边不解释,主要还是在控制层和 View 如何展示表单验证 。
实体类 User 如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
@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 控制层代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
/**
* 创建用户
* 处理 “/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 表单验证篇,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。
原文链接:http://www.bysocket.com/?p=1942&utm_source=tuicool&utm_medium=referral 。
最后此篇关于Spring Boot 表单验证篇的文章就讲到这里了,如果你想了解更多关于Spring Boot 表单验证篇的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我尝试阅读有关 Spring BOM、Spring Boot 和 Spring IO 的文档。 但是没有说明,我们应该如何一起使用它们? 在我的项目中,我们已经有了自己的 Parent POM ,所以
我正在开发的很酷的企业应用程序正在转向 Spring。这对所有团队来说都是非常酷和令人兴奋的练习,但也是一个巨大的压力源。我们所做的是逐渐将遗留组件移至 Spring 上下文。现在我们有一个 huuu
我正在尝试使用 @Scheduled 运行 Spring 批处理作业注释如下: @Scheduled(cron = "* * * * * ?") public void launchMessageDi
我对这两个概念有点困惑。阅读 Spring 文档,我发现,例如。 bean 工厂是 Spring 容器。我还读到“ApplicationContext 是 BeanFactory 的完整超集”。但两者
我们有一个使用 Spring BlazeDS 集成的应用程序。到目前为止,我们一直在使用 Spring 和 Flex,它运行良好。我们现在还需要添加一些 Spring MVC Controller 。
假设我有一个类(class) Person带属性name和 age ,它可以像这样用 Spring 配置: 我想要一个自定义的 Spring 模式元素,这很容易做到,允许我在我的 Sp
如何在 Java 中以编程方式使用 Spring Data 创建 MongoDB 复合索引? 使用 MongoTemplate 我可以创建一个这样的索引:mongoTemplate.indexOps(
我想使用 spring-complex-task 执行我的应用程序,并且我已经构建了复杂的 spring-batch Flow Jobs,它执行得非常好。 你能解释一下spring批处理流作业与spr
我实现了 spring-boot 应用程序,现在我想将它用作非 spring 应用程序的库。 如何初始化 lib 类,以便 Autowiring 的依赖项按预期工作?显然,如果我使用“new”创建类实
我刚开始学习 spring cloud security,我有一个基本问题。它与 Spring Security 有何不同?我们是否需要在 spring boot 上构建我们的应用程序才能使用 spr
有很多人建议我使用 Spring Boot 而不是 Spring 来开发 REST Web 服务。我想知道这两者到底有什么区别? 最佳答案 总之 Spring Boot 减少了编写大量配置和样板代码的
您能向我解释一下如何使用 Spring 正确构建 Web 应用程序吗?我知道 Spring 框架的最新版本是 4.0.0.RELEASE,但是 Spring Security 的最新版本是 3.2.0
我如何才能知道作为 Spring Boot 应用程序的一部分加载的所有 bean 的名称?我想在 main 方法中有一些代码来打印服务器启动后加载的 bean 的详细信息。 最佳答案 如spring-
我有一个使用 Spring 3.1 构建的 RESTful API,也使用 Spring Security。我有一个 Web 应用程序,也是一个 Spring 3.1 MVC 应用程序。我计划让移动客
升级到 Spring 5 后,我在 Spring Rabbit 和 Spring AMQP 中遇到错误。 两者现在都设置为 1.5.6.RELEASE 有谁知道哪些版本应该与 Spring 5 兼容?
我现在已经使用 Spring Framework 3.0.5 和 Spring Security 3.0.5 多次了。我知道Spring框架使用DI和AOP。我还知道 Spring Security
我收到错误 Unable to Location NamespaceHandler when using context:annotation-config running (java -jar) 由
在 Spring 应用程序中嵌入唯一版本号的策略是什么? 我有一个使用 Spring Boot 和 Spring Web 的应用程序。 它已经足够成熟,我想对其进行版本控制并在运行时看到它显示在屏幕上
我正在使用 spring data jpa 进行持久化。如果存在多个具有相同名称的实体,是否有一种方法可以将一个实体标记为默认值。类似@Primary注解的东西用来解决多个bean的依赖问题 @Ent
我阅读了 Spring 框架的 DAOSupport 类。但是我无法理解这些 DAOSuport 类的优点。在 DAOSupport 类中,我们调用 getXXXTemplate() 方法来获取特定的
我是一名优秀的程序员,十分优秀!