SpringBoot-9-Validation数据--使数据真实

简介: 数据校验是一个项目的基础模块,也许我们一些入门编码没有多久,了解前端的同学会说,我们已经在前端对数据进行了基础的校验了,还需要在后台对数据进行校验?答案是肯定的,因为前端传递给后台的数据没有百分百值得信任的,这是因为一些别有用心的人,可以模拟前端对后台进行数据发送,可能会发送一些操作后台的指令等非法数据,如果这些数据一旦发送到后台那么后果是很严重的。因此后端校验也是必须的,本章节我们介绍SpringBoot的后端数据校验。

SpringBoot-9-Validation数据–使数据真实


数据校验是一个项目的基础模块,也许我们一些入门编码没有多久,了解前端的同学会说,我们已经在前端对数据进行了基础的校验了,还需要在后台对数据进行校验?答案是肯定的,因为前端传递给后台的数据没有百分百值得信任的,这是因为一些别有用心的人,可以模拟前端对后台进行数据发送,可能会发送一些操作后台的指令等非法数据,如果这些数据一旦发送到后台那么后果是很严重的。因此后端校验也是必须的,本章节我们介绍SpringBoot的后端数据校验。


1.SpringBoot校验实现

在SpringBoot2.3以前spring-boot-starter-web自带了validation,并且该模块也提供了相对应的数据绑定功能,但是到了springboot2.3以后就变成了以下依赖进行数据校验


1.1添加依赖

<dependency>           <groupId>org.springframework.boot</groupId>



1.2 实体注解

@Datapublic class Teacher implements Serializable {   @NotBlank(message = "用户名不可为空")   private String name;   @Min(value = 22,message = "年龄不可小于22")   private int age;   @Email(message = "邮箱格式错误")   private String email;}


1.3 Controller层的实现

@Slf4j@Controllerpublic class TeacherController {   @RequestMapping("/index")   public String index( Teacher teacher,Model model) {       teacher = new Teacher();       teacher.setName("张三");       teacher.setAge(28);       teacher.setEmail("1359282905@qq.com");       model.addAttribute("teacherInfo",teacher);       return "index";  }   @RequestMapping(value = "/add", method = RequestMethod.POST)   public String add(@ModelAttribute("teacherInfo") @Validated Teacher teacher, BindingResult rs) {       System.out.println(rs);       if (rs.hasErrors()) {           for (ObjectError error : rs.getAllErrors()) {               log.debug(error.getDefaultMessage());          }      }       return "index";  }}


1.4  Thymeleaf前端的实现

<!DOCTYPE html><html  xmlns:th="http://www.thymeleaf.org"><head lang="en">   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>   <title th:text="${teacherInfo.name}">xx</title></head><body><h1>信息</h1><div>  姓名:<label th:utext="${teacherInfo.name}"></label><br/>  年龄:<label th:utext="${teacherInfo.age}"></label> <br/>  邮箱:<label th:utext="${teacherInfo.email}"></label><br/></div><h1>表单提交</h1><!-- 表单提交用户信息,注意字段的设置,直接是*{} --><form action="#" th:action="@{/add}" th:object="${teacherInfo}" method="post">   <div><span>姓名</span><input type="text" th:field="*{name}" />  <span th:if="${#fields.hasErrors('name')}" th:errors="*{name}"></span></div>   <div><span>年龄</span><input type="text" th:field="*{age}" />  <span th:if="${#fields.hasErrors('age')}" th:errors="*{age}"></span></div>   <div><span>邮箱</span><input type="text" th:field="*{email}" />  <span th:if="${#fields.hasErrors('email')}" th:errors="*{email}"></span></div>   <input type="submit" /></form></body></html>


访问http://localhost:8080/index然后进行操作:


501b8febd542c977b331684db13f4afb.png


1.5  Thymeleaf前端的实现

注解 说明
@NotNull 限制必须不为null
@NotEmpty 验证注解的元素值不为 null 且不为空(字符串长度不为0、集合大小不为0)
@NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须在 min 到 max 之间(也可以用在集合上)
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Null 限制只能为null(很少用)
@AssertFalse 限制必须为false (很少用)
@AssertTrue 限制必须为true (很少用)
@Past 限制必须是一个过去的日期
@Future 限制必须是一个将来的日期
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过 integer,小数部分的位数不能超过 fraction (很少用)
@CreditCardNumber 信用卡号进行一个大致的验证
@Length(min,max) 检查字段的长度是否在min和max之间,只限于字符串
@URL(protocol,host,port 检查是否为一个有效的URL,如果提供了protocol,host等,则该URL满足条件


目录
相关文章
|
27天前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
139 2
|
1天前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
25 9
|
27天前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
44 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
6天前
|
存储 easyexcel Java
SpringBoot+EasyExcel轻松实现300万数据快速导出!
本文介绍了在项目开发中使用Apache POI进行数据导入导出的常见问题及解决方案。首先比较了HSSFWorkbook、XSSFWorkbook和SXSSFWorkbook三种传统POI版本的优缺点,然后根据数据量大小推荐了合适的使用场景。接着重点介绍了如何使用EasyExcel处理超百万数据的导入导出,包括分批查询、分批写入Excel、分批插入数据库等技术细节。通过测试,300万数据的导出用时约2分15秒,导入用时约91秒,展示了高效的数据处理能力。最后总结了公司现有做法的不足,并提出了改进方向。
|
28天前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
2月前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
本文介绍了一个基于Spring Boot和Vue.js实现的在线考试系统。随着在线教育的发展,在线考试系统的重要性日益凸显。该系统不仅能提高教学效率,减轻教师负担,还为学生提供了灵活便捷的考试方式。技术栈包括Spring Boot、Vue.js、Element-UI等,支持多种角色登录,具备考试管理、题库管理、成绩查询等功能。系统采用前后端分离架构,具备高性能和扩展性,未来可进一步优化并引入AI技术提升智能化水平。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
|
2月前
|
Java 关系型数据库 MySQL
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和JSP技术的房屋租赁系统,旨在通过自动化和信息化手段提升房屋管理效率,优化租户体验。系统采用JDK 1.8、Maven 3.6、MySQL 8.0、JSP、Layui和Spring Boot 2.0等技术栈,实现了高效的房源管理和便捷的租户服务。通过该系统,房东可以轻松管理房源,租户可以快速找到合适的住所,双方都能享受数字化带来的便利。未来,系统将持续优化升级,提供更多完善的服务。
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
|
26天前
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
157 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
2月前
|
XML JSON Java
springboot文件上传,单文件上传和多文件上传,以及数据遍历和回显
本文介绍了在Spring Boot中如何实现文件上传,包括单文件和多文件上传的实现,文件上传的表单页面创建,接收上传文件的Controller层代码编写,以及上传成功后如何在页面上遍历并显示上传的文件。同时,还涉及了`MultipartFile`类的使用和`@RequestPart`注解,以及在`application.properties`中配置文件上传的相关参数。
springboot文件上传,单文件上传和多文件上传,以及数据遍历和回显
|
27天前
|
前端开发 Java 数据库
springBoot:template engine&自定义一个mvc&后端给前端传数据&增删改查 (三)
本文介绍了如何自定义一个 MVC 框架,包括后端向前端传递数据、前后端代理配置、实现增删改查功能以及分页查询。详细展示了代码示例,从配置文件到控制器、服务层和数据访问层的实现,帮助开发者快速理解和应用。