springboot2.3.3版本spring-boot-starter-web的依赖项已经去除了依赖hibernate-validator

使用

导入依赖

  1. <dependency>
  2. <groupId>org.hibernate.validator</groupId>
  3. <artifactId>hibernate-validator</artifactId>
  4. </dependency>

Maven仓库hibernate-validator:

添加校验

@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 = “性别选择不正确”)

  1. @NotBlank(message = "用户昵称不能为空")
  2. @Length(max = 12, message = "用户昵称不能超过12位")
  3. @ApiModelProperty(value="用户昵称", name="nickname", example="杰森", required = false)
  4. private String nickname;
  5. @Length(max = 12, message = "用户真实姓名不能超过12位")
  6. @ApiModelProperty(value="真实姓名", name="realname", example="杰森", required = false)
  7. private String realname;
  8. @Pattern(regexp = "^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\\d{8})$", message = "手机号格式不正确")
  9. @ApiModelProperty(value="手机号", name="mobile", example="13999999999", required = false)
  10. private String mobile;
  11. @Email
  12. @ApiModelProperty(value="邮箱地址", name="email", example="1173919359@qq.com", required = false)
  13. private String email;
  14. @Min(value = 0, message = "性别选择不正确")
  15. @Max(value = 2, message = "性别选择不正确")
  16. @ApiModelProperty(value="性别", name="sex", example="0:女 1:男 2:保密", required = false)
  17. private Integer sex;

获取校验结果

  1. @ApiOperation(value = "获取用户信息", notes = "获取用户信息", httpMethod = "POST")
  2. @PostMapping("update")
  3. public MyJSONResult update(
  4. // 👇👇👇 @Valid 来开启对BO的校验,
  5. @RequestBody @Valid CenterUserBO centerUserBO,
  6. BindingResult result) { 👈👈👈如果有错误信息会放到BindingResult result
  7. //hasErrors()查看result是否含有错误信息
  8. if (result.hasErrors()) {
  9. Map<String, String> errorMap = getErrors(result);
  10. return MyJSONResult.errorMap(errorMap);
  11. }
  12. }
  13. private Map<String, String> getErrors(BindingResult result) {
  14. Map<String, String> map = new HashMap<>();
  15. List<FieldError> errorList = result.getFieldErrors();
  16. for (FieldError error : errorList) {
  17. //发送验证错误所对应的某一个属性
  18. String errorField = error.getField();
  19. //验证错误信息
  20. String errorMsg = error.getDefaultMessage();
  21. map.put(errorField,errorMsg);
  22. }
  23. return map;
  24. }

效果

image.png

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

注解 作用
@Email 被注释的元素必须是电子邮箱地址
@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