springboot2.3.3版本spring-boot-starter-web的依赖项已经去除了依赖hibernate-validator
使用
导入依赖
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
添加校验
@NotBlank(message = “用户昵称不能为空”)
@Length(max = 12, message = “用户昵称不能超过12位”)
@Pattern(regexp = “^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$”, message = “手机号格式不正确”)
@Email
@Min(value = 0, message = “性别选择不正确”)
@Max(value = 2, message = “性别选择不正确”)
@NotBlank(message = "用户昵称不能为空")
@Length(max = 12, message = "用户昵称不能超过12位")
@ApiModelProperty(value="用户昵称", name="nickname", example="杰森", required = false)
private String nickname;
@Length(max = 12, message = "用户真实姓名不能超过12位")
@ApiModelProperty(value="真实姓名", name="realname", example="杰森", required = false)
private String realname;
@Pattern(regexp = "^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\\d{8})$", message = "手机号格式不正确")
@ApiModelProperty(value="手机号", name="mobile", example="13999999999", required = false)
private String mobile;
@ApiModelProperty(value="邮箱地址", name="email", example="1173919359@qq.com", required = false)
private String email;
@Min(value = 0, message = "性别选择不正确")
@Max(value = 2, message = "性别选择不正确")
@ApiModelProperty(value="性别", name="sex", example="0:女 1:男 2:保密", required = false)
private Integer sex;
获取校验结果
@ApiOperation(value = "获取用户信息", notes = "获取用户信息", httpMethod = "POST")
@PostMapping("update")
public MyJSONResult update(
// 👇👇👇 @Valid 来开启对BO的校验,
@RequestBody @Valid CenterUserBO centerUserBO,
BindingResult result) { 👈👈👈如果有错误信息会放到BindingResult result中
//hasErrors()查看result是否含有错误信息
if (result.hasErrors()) {
Map<String, String> errorMap = getErrors(result);
return MyJSONResult.errorMap(errorMap);
}
}
private Map<String, String> getErrors(BindingResult result) {
Map<String, String> map = new HashMap<>();
List<FieldError> errorList = result.getFieldErrors();
for (FieldError error : errorList) {
//发送验证错误所对应的某一个属性
String errorField = error.getField();
//验证错误信息
String errorMsg = error.getDefaultMessage();
map.put(errorField,errorMsg);
}
return map;
}
效果
hibernate Validator
hibernate Validator 是 Bean Validation 的参考实现 。Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint。
在日常开发中,Hibernate Validator经常用来验证bean的字段,基于注解,方便快捷高效。
Bean Validation 中内置的 constraint:
注解 | 作用 |
---|---|
@Valid | 被注释的元素是一个对象,需要检查此对象的所有字段值 |
@Null | 被注释的元素必须为 null |
@NotNull | 被注释的元素必须不为 null |
@AssertTrue | 被注释的元素必须为 true |
@AssertFalse | 被注释的元素必须为 false |
@Min(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@Max(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@DecimalMin(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@DecimalMax(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@Size(max, min) | 被注释的元素的大小必须在指定的范围内 |
@Digits (integer, fraction) | 被注释的元素必须是一个数字,其值必须在可接受的范围内 |
@Past | 被注释的元素必须是一个过去的日期 |
@Future | 被注释的元素必须是一个将来的日期 |
@Pattern(value) | 被注释的元素必须符合指定的正则表达式 |
Hibernate Validator 附加的 constraint
注解 | 作用 |
---|---|
被注释的元素必须是电子邮箱地址 | |
@Length(min=, max=) | 被注释的字符串的大小必须在指定的范围内 |
@NotEmpty | 被注释的字符串的必须非空 |
@Range(min=, max=) | 被注释的元素必须在合适的范围内 |
@NotBlank | 被注释的字符串的必须非空 |
@URL(protocol=, host=, port=, regexp=, flags=) |
被注释的字符串必须是一个有效的url |
@CreditCardNumber | 被注释的字符串必须通过Luhn校验算法,银行卡,信用卡等号码一般都用Luhn计算合法性 |
@ScriptAssert (lang=, script=, alias=) |
要有Java Scripting API 即JSR 223 (“Scripting for the JavaTM Platform”)的实现 |
@SafeHtml (whitelistType=, additionalTags=) |
classpath中要有jsoup包 |
注意:
主要区分下@NotNull @NotEmpty @NotBlank 3个注解的区别:
@NotNull 任何对象的value不能为null
@NotEmpty 集合对象的元素不为0,即集合不为空,也可以用于字符串不为null
@NotBlank 只能用于字符串不为null,并且字符串trim()以后length要大于0