前言

  SpringBoot提供了强大的表单验证功能实现,给我们省去了写验证的麻烦;表单验证,即校验用户提交的数据的合理性的,比如是否为空了,密码长度是否大于6位,是否是纯数字的,等等。Spring boot是如何帮我们实现表单验证的呢?
  接下来我们来编写一个小案例:一个注册页面,判断用户输入的信息是否合理

注册页面代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Register</title>
<style>
span{
color: red;
}

form{
display: inline-block;
margin-left: 350px;
}
</style>
</head>
<body>
<form action="/register" method="get">
username:<input type="text" name="username"/><span>* 用户名最小长度为5</span><br>
password:<input type="text" name="password"/><span>* 密码长度是6-16位</span><br>
age:<input type="text" name="age"/><span>* 年龄为13~80之间</span><br>
<input type="submit" value="注册"/>
</form>
</body>
</html>

controller代码,注意传入的参数前加注解@Valid

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package club.test.www.springbootdemo.controller;

import club.test.www.springbootdemo.entity.User;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;

@RestController
public class LoginController {

/**
* @Valid标记需要验证的对象
*/
@RequestMapping("/register")
public String register(@Valid User user,BindingResult bindingResult){
if(bindingResult.hasErrors()){
return bindingResult.getFieldError().getDefaultMessage();
}else
return "注册成功!";
}
}

实体类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
package club.test.www.springbootdemo.entity;

import javax.validation.constraints.*;

public class User {
//着重看属性定义这一块

@Size(min = 5,message = "用户名最小长度为5")
@NotNull(message = "password不能为空")
private String username;

@Size(min = 6,max = 16,message = "密码长度是6-16位")
@NotNull(message = "password不能为空")
private String password;

@Min(value = 13,message = "最小年龄为13")
@Max(value = 80,message = "最大年龄为80")
private int age;

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public User(String username, String password, int age) {
this.username = username;
this.password = password;
this.age = age;
}

public User() {
}
}

测试结果

  • 输入用户名没有达到要求

  • 输入密码没有达到要求

  • 输入年龄没有达到要求

注解清单

这里只用了几个注解,下面列下清单,平时可以参考使用

限制 说明
@Null 限制只能为null
@NotNull 限制必须不为null
@AssertFalse 限制必须为false
@AssertTrue 限制必须为true
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future 限制必须是一个将来的日期
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Past 限制必须是一个过去的日期
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须在min到max之间
@Past 验证注解的元素值(日期类型)比当前时间早
@NotEmpty 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,
@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

ps:因作者能力有限,有错误的地方请见谅

  • 喜欢这篇文章的话可以用快捷键 Ctrl + D 来收藏本页

最后更新: 2018年09月19日 16:03

原始链接: https://blog.hdqyf.club/2018/05/20/20180520-SpringBoot—表单验证@Valid/

× 请我吃糖~
打赏二维码