Spring 参数校验
🏷️ Spring Boot
pom.xml
pom.xml 中添加 hibernate-validator
的依赖
<!-- hibernate-validator -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>
Demo.java
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;
public class Demo {
@NotEmpty(message = "姓名不能为空")
private String name;
@NotEmpty(message = "密码不能为空")
@Length(min = 6, message = "密码长度不能小于 6 位")
private String password;
...
}
DemoController
@RequestMapping("/demoAdd")
public String demoAdd(@Valid Demo demo, BindingResult result, Model model){
//有错误信息.
model.addAttribute("demo", demo);
if (result.hasErrors()) {
List<ObjectError> list = result.getAllErrors();
for(ObjectError error:list) {
System.out.println(error.getCode() + "---" + error.getArguments() + "---" + error.getDefaultMessage());
}
return "demo";
}
return "/demo";
}
BindingResult
所有的错误信息都会保存在这个类中,我们可以使用result.hasErrors()
判断是否有错误信息。
校验注解
@Null
只能是null
@NotNull
不能为null
注意用在基本类型上无效,基本类型有默认初始值@AssertFalse
必须为false
@AssertTrue
必须是true
字符串/数组/集合检查
字符串本身就是个数组
@Pattern(regexp="reg")
验证字符串满足正则@Size(max, min)
验证字符串、数组、集合长度范围@NotEmpty
验证字符串不为空或者null
@NotBlank
验证字符串不为null
或者trim()
后不为空
数值检查
同时能验证一个字符串是否是满足限制的数字的字符串
@Max
规定值得上限int
@Min
规定值得下限@DecimalMax("10.8")
以传入字符串构建一个BigDecimal
,规定值要小于这个值@DecimalMin
可以用来限制浮点数大小@Digits(int1, int2)
限制一个小数,整数精度小于int1
;小数部分精度小于int2
@Digits
无参数,验证字符串是否合法@Range(min=long1,max=long2)
检查数字是否在范围之间这些都包括边界值
日期检查:Date/Calendar
@Past
限定一个日期,日期必须是过去的日期@Future
限定一个日期,日期必须是未来的日期
其他验证
@Vaild
递归验证,用于对象、数组和集合,会对对象的元素、数组的元素进行一一校验@Email
用于验证一个字符串是否是一个合法的右键地址,空字符串或null
算验证通过@URL(protocol=,host=,port=,regexp=,flags=)
用于校验一个字符串是否是合法 URL
示例
@Size (min=3, max=20, message="用户名长度只能在 3-20 之间")
@Size (min=6, max=20, message="密码长度只能在 6-20 之间")
@Pattern (regexp="[a-za-z0-9._%+-]+@[a-za-z0-9.-]+\\.[a-za-z]{2,4}", message="邮件格式错误")
@Length(min = 5, max = 20, message = "用户名长度必须位于 5 到 20 之间")
@Email(message = "比如输入正确的邮箱")
@NotNull(message = "用户名称不能为空")
@Max(value = 100, message = "年龄不能大于 100 岁")
@Min(value= 18 ,message= "必须年满 18 岁!" )
@AssertTrue(message = "bln4 must is true")
@AssertFalse(message = "blnf must is falase")
@DecimalMax(value="100",message="decim 最大值是 100")
@DecimalMin(value="100",message="decim 最小值是 100")
@NotNull(message = "身份证不能为空")
@Pattern(regexp="^(\\d{18,18}|\\d{15,15}|(\\d{17,17}[x|X]))$", message="身份证格式错误")