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
测试,直接点击OK,会提交表单到save到User实体类做校验
对数据做不规范的输入并点击OK,例如