一、前言
我们在项目开发的过程中往往会有数据校验的要求,比如需要用户提交数据非空、不重复等等。
二、实现方式
首先在pom文件中加入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
在实体类要校验的属性上加上相关注解
public class Type {
//message属性可以被前端拿到
@NotBlank(message = "名称不能为空")
private String name;
}
空检查
@Null 验证对象是否为null
@NotNull 验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty 检查约束元素是否为NULL或者是EMPTY.
Booelan检查
@AssertTrue 验证 Boolean 对象是否为 true
@AssertFalse 验证 Boolean 对象是否为 false
长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=) string is between min and max included.
日期检查
@Past 验证 Date 和 Calendar 对象是否在当前时间之前
@Future 验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern 验证 String 对象是否符合正则表达式的规则
在Controller中在要验证的参数前面加上@Valid,可以再加一个BindingResult类型的参数来接收校验之后的结果
@PostMapping("/types/{id}")
public String editPost(@Valid Type type, BindingResult result,@PathVariable Long id, RedirectAttributes attributes){
Type type1 = typeService.getTypeByName(type.getName());
if(type1 != null){
//自定义验证结果(验证属性的名字与实体类名字要相同,自定义结果类型,自定义提示)
result.rejectValue("name","nameError","不能添加重复分类");
}
if(result.hasErrors()) {
return "admin/types-input";
}
Type t = typeService.updateType(id,type);
if(t == null) {
attributes.addFlashAttribute("message","更新失败");
} else {
attributes.addFlashAttribute("message","更新成功");
}
return "redirect:/admin/types";
}
因为是最后是一个重定向的操作,无法携带 request 中的数据,为了传递 message 数据,加入了一个 RedirectAttributes 类型的参数。参数中的 addFlashAttributie(“param”, value) 方法与 addAttributie("prama",value) 方法不同点在于,后者相当于在重定向链接地址追加传递的参数,直接将传递的参数暴露在链接地址上,非常的不安全。前者是隐藏了参数,链接地址上不直接暴露,但是能且只能在重定向的 “页面” 获取prama参数值。其原理就是放到session中,session在跳到页面后马上移除对象。如果是重定向一个controller中是获取不到该prama属性值的。除非在controller中用(@RequestPrama(value = “prama”)String prama)注解,采用传参的方式。
三、最后是前端校验结果的代码
<div th:if="${#fields.hasErrors('name')}">
<h1>验证失败</h1>
<p th:errors="*{name}">提交信息不符合规则</p>
</div>
本文介绍了一种使用Spring Boot进行数据校验的方法,包括如何引入依赖、应用校验注解及处理校验结果。通过示例展示了如何在实体类中使用各种校验注解确保数据的有效性,并在控制器中处理这些校验结果。
480

被折叠的 条评论
为什么被折叠?



