验证表单

实验结果


项目结构目录如下

0.添加依赖

     <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>

0.设置路径
application.properties文件

spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.servlet.content-type=text/html
spring.thymeleaf.encoding=utf-8
spring.thymeleaf.mode=LEGACYHTML5
spring.thymeleaf.cache=false
spring.mvc.static-path-pattern=/**
spring.resources.static-locations=classpath:/static/

1.创建实体
User.java

package com.example.demo.entity;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
//import hibernate.validator.constraints.Length;
import javax.validation.constraints.*;
import java.io.Serializable;
@Data
public class User implements Serializable {/*** 主键:id* */private Long id;@NotBlank(message = "用户名不能为空")@Length(min=5,max=20,message = "用户名长度为5-20个字符")private String name;@NotNull(message = "年龄不能为空")@Min(value=18,message = "最小18岁")@Max(value=60,message = "最大60岁")private Integer age;@Email(message = "请输入邮箱")@NotBlank(message = "邮箱不能为空")private String email;}

2.编写验证控制器
用于绑定数据验证
TestValidator.java

package com.example.demo.controller;
import com.example.demo.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import  org.springframework.web.bind.annotation.GetMapping;
import  org.springframework.web.bind.annotation.PostMapping;
import  org.springframework.web.servlet.mvc.support.RedirectAttributes;
import javax.validation.Valid;
@Controller
public class TestValidator {@GetMapping("/test")public String showForm(User user){return "form";}@GetMapping("/results")public String results(){return "results";}@PostMapping("/test")public String checkUser(@Valid User user,BindingResult bindingResult,RedirectAttributes attr){if(bindingResult.hasErrors()){return "form";}attr.addFlashAttribute("user",user);return "redirect:/results";}
}

3.编写视图
form.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<body>
<style type="text/css">.warn{color:red}
</style>
<form th:action="@{/test}" th:object="${user}" method="post"><div><div><span>姓名:</span><span><input type="text" th:field="*{name}"/></span><span  class="warn" th:if="${#fields.hasErrors('name')}" th:errors="*{name}">名字错误</span></div><div><span>年龄:</span><span><input type="number" th:field="*{age}"/></span><span  class="warn" th:if="${#fields.hasErrors('age')}" th:errors="*{age}">年龄错误</span></div><div><span>邮箱:</span><span><input TYPE="text" th:field="*{email}"/></span><span  class="warn" th:if="${#fields.hasErrors('email')}" th:errors="*{email}">邮箱错误</span></div><div><span><button type="submit">提交</button></span></div></div>
</form>
</body>
</html>

results.html

如果验证成功,使用本视图进行渲染数据;如果验证失败,返回表单提示错误

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<body>
<div th:each="user:${user}">恭喜您,<span th:text="${user.name}">名字</span>(先生/女士),数据提交成功!<div>您的年龄是:<span th:text="${user.age}"></span></div><div>您的邮箱是:<span th:text="${user.email}"></span></div>
</div></body>
</html>

4.运行项目
打开http://localhost:8080/test

自定义验证

实验结果


项目结构

application.properties文件

spring.thymeleaf.mode=HTML
spring.thymeleaf.cache=false

1.自定义注解类
MyConstraintValdator.java

package com.example;import com.example.demo.MyConstraint;import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;public class MyConstraintValdator implements ConstraintValidator<MyConstraint, String> {//String为校验的类型@Overridepublic void initialize(MyConstraint myConstraint) {//启动时执行}/*** @ Description: 自定义校验逻辑*/@Overridepublic boolean isValid(String s, ConstraintValidatorContext validatorContext) {if (!(s.equals("北京") || s.equals("上海"))) {return false;}return true;}
}

2.自定义验证业务逻辑类
有两个方法:initialize和isValid
MyConstraint .java

package com.example.demo;
import com.example.MyConstraintValdator;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//限定使用范围:只能在字段上使用
@Target({ElementType.FIELD})
//表明注解的生命周期,它在代码运行时可以通过反射获取到注解
@Retention(RetentionPolicy.RUNTIME)
//@Constraint 注解,里面传入一个validateBy字段,以指定该注解的校验逻辑
@Constraint(validatedBy= MyConstraintValdator.class)public @interface MyConstraint {/*** @ Description:错误提示* */String message() default "请输入中国政治中心或经济中心的城市名";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};
}

3.创建实体
User.java

package com.example.demo.entity;import com.example.demo.MyConstraint;
import lombok.Data;
import org.hibernate.validator.constraints.Length;import javax.validation.constraints.*;
import java.io.Serializable;@Data
public class User implements Serializable {/*** 主键ID*/private Long id;@NotBlank(message = "用户名不能为空")@Length(min = 5, max = 20, message = "用户名长度为5-20个字符")private String name;@NotNull(message = "年龄不能为空")@Min(value = 18 ,message = "最小18岁")@Max(value = 60,message = "最大60岁")private Integer age;/*    @NotBlank(message = "电话不可以为空")@Length(min = 1, max = 13, message = "电话长度需要在13个字符以内")private String phone;*/@Email(message = "请输入邮箱")@NotBlank(message = "邮箱不能为空")private String email;/* @NotNull(message = "必须指定用户状态")@Min(value = 0, message = "用户状态不合法")@Max(value = 1, message = "用户状态不合法")private Integer status;*/@MyConstraintprivate String answer;}

4.编写验证控制器
TestValidator.java

package com.example.demo.controller;import com.example.demo.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;import javax.validation.Valid;@Controller
public class TestValidator {@GetMapping("/test")public String showForm(User user) {return "form";}@GetMapping("/results")public String results() {return "results";}@PostMapping("/test")public String checkUser(@Valid User user, BindingResult bindingResult, RedirectAttributes attr) {if (bindingResult.hasErrors()) {return "form";}/*** @ Description:* 1.使用RedirectAttributes的addAttribute方法传递参数会跟随在URL后面 ,如上代码即为?name=long&age=45* 2.使用addFlashAttribute不会跟随在URL后面,会把该参数值暂时保存于session,待重定向url获取该参数后从session中移除,* 这里的redirect必须是方法映射路径。你会发现redirect后的值只会出现一次,刷新后不会出现了,对于重复提交可以使用此来完成。*/attr.addFlashAttribute("user", user);return "redirect:/results";}
}

5.视图文件
form.html


<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<body>
<style type="text/css">.warn{color:red}
</style>
<form th:action="@{/test}" th:object="${user}" method="post"><div><div><span>姓名:</span><span><input type="text" th:field="*{name}"/></span><span  class="warn" th:if="${#fields.hasErrors('name')}" th:errors="*{name}">名字错误</span></div><div><span>年龄:</span><span><input type="number" th:field="*{age}"/></span><span  class="warn" th:if="${#fields.hasErrors('age')}" th:errors="*{age}">年龄错误</span></div><div><span>邮箱:</span><span><input TYPE="text" th:field="*{email}"/></span><span  class="warn" th:if="${#fields.hasErrors('email')}" th:errors="*{email}">邮箱错误</span></div><div><span>验证答案:</span><span><input TYPE="text" th:field="*{answer}"/></span><span  class="warn" th:if="${#fields.hasErrors('answer')}" th:errors="*{answer}">答案错误</span></div><div><span><button type="submit">提交</button></span></div></div>
</form>
</body>
</html>

results.html
和上面无异


<html  lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<body>
<div th:each="user: ${user}">恭喜您,<span th:text="${user.name}">名字</span>(先生/女士),数据提交成功!<div>您的年龄是:<span th:text="${user.age}"></span></div><div> 您的邮箱是:<span th:text="${user.email}"></span></div>
</div></body>
</html>

依赖如下

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>

由于SpringBoot使用的是2.3,此时需要手动添加validation的依赖。

Springboot验证表单数据和自定义验证相关推荐

  1. element-ui表单验证(验证手机号是否正确,自定义验证规则)

    效果图 1. html <el-form :model="userForm"status-icon:rules="rules"class="lo ...

  2. Layui form 表单验证lay-verify的使用 和自定义验证及常用正则表达式

    layui 表单自带校验 lay-verify:表单验证的关键字 有以下值供选择: required (必填项) phone(手机号) email(邮箱) url(网址) number(数字) dat ...

  3. JavaScript验证表单数据,HTML自动验证表单数据是否为空,数字范围

    典型数据验证: a.字段是否为空: b.输入内容是否合法(例如数字字段是否输入了文本,email格式是否正确等) 数据验证时可通过javaScript进行表单验证,也可提交表单,在服务器端验证.通常情 ...

  4. 关于表单的Validform自定义验证

    博主准备将在自己在田间生产管理系统中的关于表单验证Validform代码示下: $(function(){var form = $("#form1").Validform({tip ...

  5. 数据验证html,JavaScript 表单数据验证

    JavaScript 表单 HTML 表单验证可以通过 JavaScript 来完成. HTML 表单验证也可以通过浏览器来自动完成. 如果表单字段 (fname) 的值为空, required 属性 ...

  6. Element UI 表单在el-form-item中使用自定义验证规则

    1:官网示例 <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleFo ...

  7. 功能:登录和退出(表单重置和预验证、路由导航守卫、路由重定向)

    3.登录/退出功能 3.1登录概述 3.1-1.登录业务流程 ①在登录页面输入用户名和密码 ②调用后台接口进行验证 ③通过验证之后,根据后台的响应状态跳转到项目主页 3.1-2.登录业务的相关技术点 ...

  8. 【转】ASP.NET验证控件详解(非空验证,比较验证,范围验证,正则表达式,自定义验证)...

    [转]ASP.NET验证控件详解(非空验证,比较验证,范围验证,正则表达式,自定义验证) ASP.NET验证控件详解 现在ASP.NET,你不但可以轻松的实现对用户输入的验证,而且,还可以选择验证在服 ...

  9. Java中布尔值的定义_使用简单的布尔值作为自定义验证器

    我正在Angular 4中尝试表单验证,我对实现自定义验证器有点困惑 . 这是我的表格组声明: this.signupForm = fb.group({ 'username': [null, Vali ...

最新文章

  1. 条件独立(conditional independence) 结合贝叶斯网络(Bayesian network) 概率有向图 (PRML8.2总结)...
  2. DetNAS ThunderNet
  3. ABP入门系列(17)——使用ABP集成的邮件系统发送邮件
  4. 如何用结构型信号量实现互斥和同步
  5. 高平二中2021高考成绩查询,录取信息
  6. Java中 intValue,parseInt,Valueof 这三个关键字的区别
  7. JAVA基础—适配器设计模式
  8. LabVIEW升级图像识别功能
  9. 详细安装 kali 教程
  10. Simulink转化为低版本文件
  11. java poi设置导出的excel带下拉
  12. Tableau 网站流量分析案例汇总
  13. Shell脚本模拟用户行为刷App积分,学习娱乐之用,再加图像数字识别验证码登录
  14. 多维分析,为什么企业开始大规模应用商业智能(BI)
  15. XTransfer外贸收款账户是如何收费的?
  16. c语言魔方还原程序案例,利用C语言玩转魔方阵实例教程
  17. Android团队的组建和管理
  18. 农村小伙艰难的复工之路
  19. 前端HTML5 颜色选择器 input[type = color]
  20. 反爬虫,看看互联网大厂是怎么玩的?

热门文章

  1. kafka log4j配置
  2. Winform开发框架之混合型框架的实现
  3. 使用 Spring 2.5 基于注解驱动的 Spring MVC(二)
  4. jquery中文参考文档
  5. 一个div 上下两行_纯CSS实现单一div的正多边形变换
  6. 用径向函数和球谐函数计算氢原子能级并验证维里定理
  7. 立体神经网络模拟连续不完备系统
  8. excel 粘贴到web_最新技术让excel秒变web数据库
  9. 构建根文件系统之启动第1个程序init
  10. Python whl文件制作简介