表单验证,即校验用户提交的数据的合理性的,比如是否为空了,密码长度是否大于6位,是否是纯数字的,等等。Spring boot是如何帮我们实现表单验证的呢?
假设现在我们存在这么一个注册界面:
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8" />
- <title>hello spring boot</title>
- </head>
- <body>
- <form action="/doRegister" method="post">
- <p>姓名:<input type="text" name="username"/>
- </p>
- <p>密码:<input type="text" name="password"/>
- </p>
- <p><button>提交</button></p>
- </form>
- </body>
- </html>
需要验证提交上去的用户名,密码。是否为空,以及其他的一些问题。我们需要怎么做呢?
首先我们需要一个实体类:User类,存储表单提交上来的数据:
- public class User {
-
- private int id;
-
- @NotEmpty(message="用户名不能为空")
- private String username;
-
- @NotEmpty(message="密码不能为空")
- @Length(min=6, message="密码长度不能少于6位")
- private String password;
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- 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;
- }
-
- }
使用@NotEmpty,@Length等注解,添加message的值,指示如果不符合的话,会得到什么message。
接下来编写Controller类:使用@Valid注解验证数据,并且使用BindingResult获取结果。
- @Controller
- public class FormController {
-
- @RequestMapping(value="/register", method=RequestMethod.GET)
- public String register() {
- return "register";
- }
-
-
- @RequestMapping(value = "/doRegister", method = RequestMethod.POST)
- public @ResponseBody User doRegister(@Valid User user, BindingResult result, Model model) {
- if (result.hasErrors()) {
- List<ObjectError> list = result.getAllErrors();
- for (ObjectError error : list) {
- System.out.println(error.getDefaultMessage());
- }
- return null;
- }
- System.out.println("注册..");
- return user;
- }
-
- }
这样就完成了一个简单的表单验证。
而除了@NotEmpty,@Length之外,还有很多其他的注解:
@null 验证对象是否为空
@notnull 验证对象是否为非空
@asserttrue 验证 boolean 对象是否为 true
@assertfalse 验证 boolean 对象是否为 false
@min 验证 number 和 string 对象是否大等于指定的值
@max 验证 number 和 string 对象是否小等于指定的值
@decimalmin 验证 number 和 string 对象是否大等于指定的值,小数存在精度
@decimalmax 验证 number 和 string 对象是否小等于指定的值,小数存在精度
@size 验证对象(array,collection,map,string)长度是否在给定的范围之内
@digits 验证 number 和 string 的构成是否合法
@past 验证 date 和 calendar 对象是否在当前时间之前
@future 验证 date 和 calendar 对象是否在当前时间之后
@pattern 验证 string 对象是否符合正则表达式的规则
@Email 验证邮箱