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
