SpringBoot入门 (十一) 数据校验
本文记录学习在SpringBoot中做数据校验。
一 什么是数据校验
数据校验就是在应用程序中,对输入进来得数据做语义分析判断,阻挡不符合规则得数据,放行符合规则得数据,以确保被保存得数据符合我们得数据存储规则。
在SpringMvc中做数据校验有2中方式:一种是 Spring 自带的验证框架,另外一种是利用 JSR 实现。JSR 是一个规范,提供了完整得一套 API,通过标注给对象属性添加约束。Hibernate Validator 就是 对JSR 规范所有注解的具体实现,以及一些附加的约束注解。用户还可以自定义约束注解。Hibernate Validator提供得注解如下:
| 注解 | 作用目标 | 检查规则 |
| @Length(min=, max=) | 属性(String) | 检查字符串长度是否符合范围 |
| @Max(value=) | 属性(以 numeric 或者 string 类型来表示一个数字) | 检查值是否小于或等于最大值 |
| @Min(value=) | 属性(以 numeric 或者 string 类型来表示一个数字) | 检查值是否大于或等于最小值 |
| @NotNull | 属性 | 检查值是否非空(not null) |
| @Future | 属性(date 或 calendar) | 检查日期是否是未来 |
| @Pattern(regex="regexp", flag=) | 属性(string) | 检查属性是否与给定匹配标志的正则表达式相匹配 |
| @Range(min=, max=) | 属性(以 numeric 或者 string 类型来表示一个数字) | 检查值是否在最小和最大值之间(包括临界值) |
| @Size(min=, max=) | 属性(array,collection,map) | 检查元素大小是否在最小和最大值之间(包括临界值) |
| @AssertFalse | 属性 | 检查方法的演算结果是否为 false(对以代码方式而不是注解表示的约束很有用) |
| @AssertTrue | 属性 | 检查方法的演算结果是否为 true(对以代码方式而不是注解表示的约束很有用) |
| @Valid | 属性(object) | 对关联对象递归进行验证。如果对象是集合或数组,就递归地验证其元素;如果对象是 Map,则递归验证其值元素 |
| 属性(String) | 检查字符串是否符合有效的 email 地址规范 | |
| @Past | 属性(date 或 calendar) | 检查日期是否是过去 |
二 使用示例
SpringBoot对数据校验也做了支持,默认提供的参数校验依赖于 hibernate-validator来实现。使用 Hibernate Validator校验数据,需要定义一个接收的数据模型,使用注解的形式描述字段校验的规则。通过前台页面提交form表单保存数据,后台做校验。
在pom.xml文件中引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
写一个实体类,对相关属性字段通过注解添加校验规则
public class Person {
@NotBlank(message = "不能为空")
@Length(min = 2, max = 20, message = "长度要在2到20之间")
private String name;
@NotNull
@Min(value = 17, message = "最小值为17")
private Integer age;
@NotEmpty
@Email(message="邮件格式不正确")
private String email;
// 此处省略getter和setter
}
每个注解中得属性message是数据校验不通过时我们要给出得提示信息,如 @Email(message="邮件格式不正确") 当邮件格式校验不通过时,提示邮件格式不正确。
控制器
@Controller
public class TestController { @GetMapping("/info")
public String info(Model model){
Person person = new Person();
model.addAttribute("person", person);
return "person_info.html";
} @PostMapping("/save")
public String save(@Valid Person person, BindingResult result, Model model){
if (result.hasErrors()) {
model.addAttribute("person", person);
return "person_info.html";
}
//数据保存。。。
model.addAttribute("success","校验通过,数据已保存");
return "success.html";
} }
我们通过访问info方法,跳转到信息输入页面,提交数据时访问save方法,Person前得注解@Valid 说明当前对象要做数据校验,BindingResult 中会存储数据校验得结果,@Valid和BindingResult必须成对出现。如果校验不通过时即有错误信息,会进入if略记判断中,返回信息输入页面,展示错误提示信息。
信息输入页面
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form th:action="@{/save}" th:method="post" th:object="${person}">
<table>
<tr>
<td>name:</td>
<td><input type="text" th:field="*{name}" th:value="${person.name}"/></td>
<td th:if="${#fields.hasErrors('name')}" th:errors="*{name}" th:style="'color:red'">Name Error</td>
</tr>
<tr>
<td>age:</td>
<td><input type="text" th:field="*{age}" th:value="${person.age}"/></td>
<td th:if="${#fields.hasErrors('age')}" th:errors="*{age}" th:style="'color:red'">Age Error</td>
</tr>
<tr>
<td>email:</td>
<td><input type="text" th:field="*{email}" th:value="${person.email}"/></td>
<td th:if="${#fields.hasErrors('email')}" th:errors="*{email}" th:style="'color:red'">Email Error</td>
</tr>
<tr>
<td th:colspan="2"><button th:type="submit">Submit</button></td>
</tr>
</table>
</form>
</body>
</html>
th:object 要与后台接收校验得对象保持一致。访问info方法在页面随便输入一些信息,在提交数据,会看到校验结果

如果各项数据都符合规则,则校验通过,跳转至success页面

SpringBoot入门 (十一) 数据校验的更多相关文章
- 【使用篇二】SpringBoot服务端数据校验(8)
对于任何一个应用而言,客户端做的数据有效性验证都不是安全有效的,而数据验证又是一个企业级项目架构上最为基础的功能模块,这时候就要求我们在服务端接收到数据的时候也对数据的有效性进行验证.为什么这么说呢? ...
- Springboot:JSR303数据校验(五)
@Validated //开启JSR303数据校验注解 校验规则如下: [一]空检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 @No ...
- SpringBoot中BeanValidation数据校验与优雅处理详解
目录 本篇要点 后端参数校验的必要性 不使用Validator的参数处理逻辑 Validator框架提供的便利 SpringBoot自动配置ValidationAutoConfiguration Va ...
- SpringBoot 之 JSR303 数据校验
使用示例: @Component @ConfigurationProperties(prefix = "person") @Validated //使用数据校验注解 public ...
- SpringBoot 使用validation数据校验
后端对数据进行验证 添加包 hibernate-validator <!-- https://mvnrepository.com/artifact/org.hibernate.validator ...
- SpringBoot入门基础
目录 SpringBoot入门 (一) HelloWorld. 2 一 什么是springboot 1 二 入门实例... 1 SpringBoot入门 (二) 属性文件读取... 16 一 自定义属 ...
- 《Java从入门到放弃》入门篇:springMVC数据校验
昨天我们扯完了数据传递,今天我们来聊聊数据校验的问题.来,跟着我一起读:计一噢叫,一按艳. 在springMVC中校验数据也非常简单,spring3.0拥有自己独立的数据校验框架,同时支持JSR303 ...
- [SpringBoot] - 配置文件的多种形式及JSR303数据校验
Springboot配置文件: application.yml application.properties(自带) yml的格式写起来稍微舒服一点 在application.properties ...
- SpringBoot | 第八章:统一异常、数据校验处理
前言 在web应用中,请求处理时,出现异常是非常常见的.所以当应用出现各类异常时,进行异常的捕获或者二次处理(比如sql异常正常是不能外抛)是非常必要的,比如在开发对外api服务时,约定了响应的参数格 ...
随机推荐
- hdu1176--免费馅饼(简单动态规划)
都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内.馅饼如果掉在了地上当然就 ...
- vc6中向vs2010迁移的几个问题
vc6版本支持的库编译:CJ60lib 1. 用vs2010打开CJ60库的源码的dsw,强制打开 (1)设置项目属性的语言 因为,如果代码字符的编码集不一样,则会出现函数冲定义,参数冲突等问题,这可 ...
- 《mysql必知必会》学习_第11章_20180801_欢
第11章:使用数据处理函数. P69 文本处理函数,upper()函数把文本变成大写字体. select vend_name,upper(vend_name) as vend_name_upcase ...
- JSON 全解
和js对象的区别 json只是一种数据格式,不支持undefined,字符串必须使用双引号,需要对/进行转义/. js属性名可不加"" json属性名必须加"" ...
- 实验1 单片机IO口应用及数码管显示
1. 单片机驱动蜂鸣器的实验: a) 说明:Lab51单片机实验板的蜂鸣器连接到单片机的P1.5 b) 基本要求:控制蜂鸣器每2秒响0.5秒. #include &l ...
- JS学习笔记9_JSON
1.JSON概述 JavaScript Object Natation,js对象表示法,(像XML一样)是一种数据格式,它与js有相同的语法形式 P.S.一点小历史:JSON之父是道格拉斯,<J ...
- 背水一战 Windows 10 (60) - 控件(媒体类): Pointer 涂鸦板, InkCanvas 涂鸦板
[源码下载] 背水一战 Windows 10 (60) - 控件(媒体类): Pointer 涂鸦板, InkCanvas 涂鸦板 作者:webabcd 介绍背水一战 Windows 10 之 控件( ...
- diamond的设计思路
diamond主要包含四个包:diamond-client.diamond-sdk.diamond-server和diamond-util client就非常简单的进行http的调用server拿数据 ...
- Yarn 资源调度框架
Yarn 资源调度框架 实现对资源的细粒度封装(cpu,内存,带宽) 此外,还可以通过yarn协调多种不同计算框架(MR,Spark) 概述 Apache Hadoop ...
- Only the original thread that created a view hierarchy can touch its views解决办法
这周操作系统作业布置了一个作业,内容是做个小软件,来模拟消费者生产者问题,作业实现起来不来,因为之前写过这个算法,所以关键步骤就是在消费和生产的时候更新缓存区的UI控件就行,之后问题就来了,出现了标题 ...