一) SpringBoot 对表单数据校验的技术特点

1.1SpringBoot 中使用了 Hibernate-validate 校验框架 2 SpringBoot 表单数据校验步骤
2.1在实体类中添加校验规则

在是实体类上使用的validate 框架提供的注解实现非空,长度,大小的简单校验。约束可以应用于任何访问类型的字段(公共,私有等)。但是,不支持对静态字段的约束。

1.@NotBlank 注解用于非空校验

@NotBlank(message = "用户名不许为空") //非空验证
private String username;
@NotBlank
private String password;

private Integer userAge;

2.控制器
@Valid 注解表示当前对象需要进行验证
BindingResult 对象封装了校验的结果

package com.sxt.controller;

import com.sxt.pojo.Users;
import org.apache.catalina.User;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.validation.Valid;

/**
 * @project_name:hibernate02
 * @date:2019/8/24:14:53
 * @author:shinelon
 * @Describe:
 */
@Controller
public class UserController {


    @RequestMapping(value = "/add")
    public String toJumpUserAdd(Users users){
        return "add";
    }

    /**
     * @param null
     * @description:  @Valid 注解表示当前被需要被验证的对象,该对对象在页面传递的的时候被创建,如果出现验证失败,会被model对象
     *                 在次传递到页面上。
     *                 BindingResult:对象用于验证的的接口,会被自动注入值,拥有校验是否出错
     * @return:
     * @author: shinelon
     * @time: 2019/8/24:15:03
     */
    @RequestMapping(value = "/userAdd")
    public String userAdd(@Valid  Users users, BindingResult result){
        if(result.hasErrors()){//判断是否有验证错误
            return "add";
        }
        return "ok";
    }

}

页面

<!DOCTYPE html>
<html lang="en">
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form th:action="@{/userAdd}" method="post">
    用户名:<input type="text" name="username" value=""/><font color="red" th:errors="${users.username}"></font><br/>
    密码:<input type="password" name="password" value="" /><font color="red" th:errors="${users.password}"></font><br/>
    年龄:<input type="text" name="userAge" value=""/><font color="red" th:errors="${users.userAge}"></font><br/>
    <input type="submit" value="提交"/>
</form>
</body>
</html>

校验的效果

spring boot Validator 校验 springboot校验框架_用户名

遇到异常

spring boot Validator 校验 springboot校验框架_字符串_02

解决数据校验时的异常问题
解决异常的方法,在跳转页面的方法中注入一个对象,来解决问题。要求参数对象的 变量名必须是对象的类名的全称首字母小写。
或者会用注解@Modelattribute注解指定的存在的model内的名字

@RequestMapping(value = "/add")
public String toJumpUserAdd(Users users){
    return "add";
}

异常产生的原因,

这个的thymeleaf模板标签的特性有关,在进行页面跳转的时候,对add.html进行解析的时候,th:error内获取作用域中的对象users,而此时的users并不存在,所以才会报错,
解决办法:1,在跳转的方法上加上参数Users,在进行页面的跳转的时候会自动的将Users对象加入到Model对象内

<form th:action="@{/userAdd}" method="post">
    用户名:<input type="text" name="username" value=""/><font color="red" th:errors="${users.username}"></font><br/>
    密码:<input type="password" name="password" value="" /><font color="red" th:errors="${users.password}"></font><br/>
    年龄:<input type="text" name="userAge" value=""/><font color="red" th:errors="${users.userAge}"></font><br/>
    <input type="submit" value="提交"/>
</form>

解决办法二:在前面加上一个的非空判断

<form th:action="@{/userAdd}" method="post">
    用户名:<input type="text" name="username" value=""/><font color="red" th:if="${users != null}" th:errors="${users.username}"></font><br/>
    密码:<input type="password" name="password" value="" /><font color="red" th:if="${users != null}" th:errors="${users.password}"></font><br/>
    年龄:<input type="text" name="userAge" value=""/><font color="red"  th:if="${users != null}" th:errors="${users.userAge}"></font><br/>
    <input type="submit" value="提交"/>
</form>

二)其他的注解

注解 说明
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=) 被注释的元素的大小必须在指定的范围内
@Digits(integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(regex=, flag=) 被注释的元素必须符合指定的正则表达式
@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=, max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=, max=, message=) 被注释的元素必须在合适的范围内
@NotBlank 自动祛除收尾空格
@NotEmpty 判断是否为空,不祛除首尾空格