一、 实现添加用户功能
1 创建项目
2 修改 POM 文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.4</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.Alan</groupId> <artifactId>validate</artifactId> <version>0.0.1-SNAPSHOT</version> <name>validate</name> <description>SpirngbootValidate</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--spring boot 中使用hibernate validate--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> <!--<!–Hibernate Validator Maven依赖项 这种过渡性引入了对JakartaBean验证API的依赖(jakarta.validation:jakarta.validation-api:3.0.0). –> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>7.0.1.Final</version> </dependency> <!–统一EL参考实现的maven依赖项 Hibernate Validator需要实现雅加达表达式语言有关在约束冲突消息中计算动态表达式的信息(请参见4.1节,“默认消息插值”)。 当应用程序在JavaEE容器(如JBossAS)中运行时,容器已经提供了EL实现。然而,在JavaSE环境中, 您必须将一个实现作为依赖项添加到POM文件中。例如,您可以添加以下依赖项来使用JakartaEL参考实施: –> <dependency> <groupId>org.glassfish</groupId> <artifactId>jakarta.el</artifactId> <version>4.0.0</version> </dependency> <!–Hibernate Validator CDI可移植扩展Maven依赖项 JakartaBean验证使用CDI定义了集成点(JakartaEE的上下文和依赖注入)。 如果您的应用程序运行在一个没有直接提供这种集成的环境中, 您可以通过在POM中添加以下Maven依赖项来使用Hibernate Validator CDI可移植扩展: –> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator-cdi</artifactId> <version>7.0.1.Final</version> </dependency>--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
3 编写添加用户功能创建实体类
public class Users { private String name; private String password; private Integer age; 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; } @Override public String toString() { return "Users [name=" + name + ", password=" + password + ", age=" + age + "]"; } }
3.1编写 Controller
/** * SpringBoot 表单数据校验 * * */ @Controller public class UsersController { @RequestMapping("/addUser") public String showPage(){ return "add"; } /** * 完成用户添加 */ @RequestMapping("/save") public String saveUser(Users users){ System.out.println(users); return "ok"; }}
3.2编写页面 add.html ok.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>添加用户</title> </head> <body> <form th:action="@{/save}" method="post"> 用户姓名:<input type="text" name="name"/><br/> 用户密码:<input type="password" name="password" /><br/> 用户年龄:<input type="text" name="age" /><br/> <input type="submit" value="OK"/> </form> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>操作成功</title> </head> <body> OK。。。。 </body> </html>
OK。。。。
二、 SpringBoot 对表单做数据校验
1 SpringBoot 对表单数据校验的技术特点
1.1SpringBoot 中使用了 Hibernate-validate 校验框架
2 SpringBoot 表单数据校验步骤
2.1在实体类中添加校验规则
public class Users { @NotBlank //非空校验 private String name; @NotBlank //密码非空校验 private String password; private Integer age; 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; } @Override public String toString() { return "Users [name=" + name + ", password=" + password + ", age=" + age + "]"; } }
2.2在 Controller 中开启校验
/** * 完成用户添加 *@Valid 开启对 Users 对象的数据校验 *BindingResult:封装了校验的结果 */ @RequestMapping("/save") public String saveUser(@Valid Users users,BindingResult result){ if(result.hasErrors()){ return "add"; } System.out.println(users); return "ok"; }
2.3在页面中获取提示信息
<!DOCTYPE html> <html> <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="submit" value="OK"/> </form> </body> </html>
2.4遇到异常
三、 解决数据校验时的异常问题
解决异常的方法,在跳转页面的方法中注入一个对象,来解决问题。要求参数对象的 变量名必须是对象的类名的全称首字母小写。
/** * 解决异常的方式。可以在跳转页面的方法中注入一个 Uesrs 对象。 * 注意:由于 springmvc 会将该对象放入到 Model 中传递。key 的名称会使用 该对象的驼峰式的命名规则来作为 key。 * 参数的变量名需要与对象的名称相同。将首字母小写。 * * @param users * @return */ @RequestMapping("/addUser") public String showPage( Users users){ return "add"; }
/** * 完成用户添加 *@Valid 开启对 Users 对象的数据校验 *BindingResult:封装了校验的结果 */ @RequestMapping("/save") public String saveUser( @Valid Users users,BindingResult result){ if(result.hasErrors()){ return "add"; } System.out.println(users); return "ok"; }
<!DOCTYPE html> <html> <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="submit" value="OK"/> </form> </body> </html>
如果参数的名称需要做改变
/** * * 如果想为传递的对象更改名称,可以使用@ModelAttribute("aa")这表示当 前传递的对象的 key 为 aa。 * 那么我们在页面中获取该对象的 key 也需要修改为 aa * @param users * @return */ @RequestMapping("/addUser") public String showPage(@ModelAttribute("aa") Users users){ return "add"; } /** * 完成用户添加 *@Valid 开启对 Users 对象的数据校验 *BindingResult:封装了校验的结果 */ @RequestMapping("/save") public String saveUser(@ModelAttribute("aa") @Valid Users users,BindingResult result){ if(result.hasErrors()){ return "add"; } System.out.println(users); return "ok"; }
<!DOCTYPE html> <html> <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="${aa.name}"></font><br/> 用户密码:<input type="password" name="password" /><font color="red" th:errors="${aa.password}"></font><br/> 用户年龄:<input type="text" name="age" /><font color="red" th:errors="${aa.age}"></font><br/> <input type="submit" value="OK"/> </form> </body> </html>
四、 其他校验规则
@NotBlank: 判断字符串是否为 null 或者是空串(去掉首尾空格)。
@NotEmpty: 判断字符串是否 null 或者是空串。
@Length: 判断字符的长度(最大或者最小)
@Min: 判断数值最小值
@Max: 判断数值最大值
@Email: 判断邮箱是否合