Spring Boot---(14)SpringBoot做数据效验Validate(数据效验,对页面中输入的数据进行校验)

SpringBoot做数据校验Validate(数据效验,对页面中输入的数据进行校验)

 

在开发项目时,肯定会对数据做一些校验,比如:登录用户时,需要校验用户名的长度,可用性。密码的长度,或者是年龄,指定为0到100,有些人可能比较长寿,那就0到150岁。不过目前过百的年龄应该也不怎么会使用电脑吧。这就不讨论了。关于这个数据校验也没有太多可以说的。直接上代码演示就好。

 

页面:ok.html

<!DOCTYPE html>
<html xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>操作成功</title>
</head>
<body>
	OK。。。。
</body>
</html>

页面add.html

<!DOCTYPE html>
<html xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>添加用户</title>
</head>
<body>
	<form th:action="@{/save}" method="post">
		用户姓名:<input type="text" name="name" />
		<!-- 在名字右侧显示效验结果 -->
		<font color="red" th:errors="${users.name}"></font>
		<br/>
		用户密码:<input type="password" name="password" />
		<font color="red" th:errors="${users.password}"></font>
		<br/>
		用户年龄:<input type="text" name="age" />
		<font color="red" th:errors="${users.age}"></font>
		<br/>
		用户邮箱:<input type="text" name="email" />
		<font color="red" th:errors="${users.email}"></font>
		<br/>
		<input type="submit" value="OK"/>
	</form>
</body>
</html>

启动类

package com.kevin;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author kevin
 * @version 1.0
 * @description     springboot中服务端数据,数据效验
 * @createDate 2019/3/14
 */
@SpringBootApplication
public class ValidateApplication {

    public static void main(String[] args) {
        SpringApplication.run(ValidateApplication.class,args);
    }
}

Controller控制层

package com.kevin.controller;

import com.kevin.model.Users;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.validation.Valid;

/**
 * @author kevin
 * @version 1.0
 * @description     springboot整合hibernate Validate效验的控制层
 * @createDate 2019/3/14
 */
@Controller
public class UsersController {

    /**
     * 该页面跳到转add.html页面上进行操作
     * 访问地址 http://localhost:8080/addUser
     * 方式一:
     * 解决Exception processing template "add": Error during execution of processor 'org.thymeleaf.spring5.processor.SpringErrorsTagProcessor'
     * 异常的方式。可以在跳转页面的方法中注入一个Users对象。例如:public String showPage(Users users)
     * 注意:由于springmvc会将对象放入Model中传递,key的名称会使用该对象的驼峰式命名规则作为key,
     * 参数的变量名需要与对象的名称相同,将首字母小写。
     *
     * 方式二:
     * 如果不想名称是默认的驼峰式的命名,想使用自定义的命名方式
     * 可以使用@ModelAttribute,比如我想命名成u,例如:public String showPage(@ModelAttribute("u") Users users)
     *
     * @return
     */
    @RequestMapping("/addUser")
    public String showPage(Users users){
        return "add";
    }

    /**
     * 完成用户添加
     * 该方法由add.html中的表单提交跳转到此处
     * @param users
     * @return
     */
    /*@RequestMapping("/save")
    public String saveUser(Users users){
        System.out.println(users);
        return "ok";
    }*/

    /**
     * 完成用户添加
     * 该方法由add.html中的表单提交跳转到此处
     * @Valid 注解表示开启对Users对象的数据效验
     * BindingResult: 封装了效验的结果
     *
     * 页面校验要是用命名要是想自定义的需要加上@ModelAttribute
     * public String saveUser(@ModelAttribute("u") @Valid Users users, BindingResult result)
     * @param users
     * @return
     */
    @RequestMapping("/save")
    public String saveUser(@Valid Users users, BindingResult result){

        // 效验失败
        if(result.hasErrors()) {
            return "add";
        }
        System.out.println(users);
        return "ok";
    }
}

Users用户实体类

package com.kevin.model;

import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;


/**
 * @author kevin
 * @version 1.0
 * @description     在实体类添加效验规则
 *              springboot使用了hibernate-validate效验规则
 * @createDate 2019/3/14
 */
public class Users {

    /**
     * @NotBlank:判断字符串是否为为null或者是空串(去掉首尾空格)
     * @NotEmpty:判断字符串是否为null或者是空串(不会去掉首尾空格)
     * @Length:判断字符的长度(最大或者最小)
     * @Min:判断数值最小值
     * @Max:判断数值最大值
     * @Email:判断邮箱是否合法
     *
     */

    // 一个属性可以加多个效验
    @NotBlank(message = "用户名不能为空")   // 非空校验
    @Length(min=2,max=6,message = "最小长度为二位,最大长度为六位")    // 长度最小不能小于2位,最大不能大于6位
    private String name;
    @NotBlank(message = "密码不能为空")   // 密码非空效验
    private String password;
    @Min(value = 0,message = "最小年龄不能小于0岁")
    @Max(value = 150,message = "最大年龄不能大于150岁")
    private Integer age;
    @Email
    private String email;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "Users{" +
                "name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                ", email='" + email + '\'' +
                '}';
    }
}

访问地址:http://localhost:8080/addUser

Spring Boot---(14)SpringBoot做数据效验Validate(数据效验,对页面中输入的数据进行校验)

测试,直接点击OK,会提交表单到save到User实体类做校验

Spring Boot---(14)SpringBoot做数据效验Validate(数据效验,对页面中输入的数据进行校验)

对数据做不规范的输入并点击OK,例如

Spring Boot---(14)SpringBoot做数据效验Validate(数据效验,对页面中输入的数据进行校验)