作用
这个依赖项是用于在Spring Boot应用程序中启用验证(Validation)功能的Starter依赖项。
作用如下:
-
启用验证功能:该依赖项为您提供了Spring Boot中的验证功能。它包含了验证所需的类和配置,以便在应用程序中执行验证操作。
-
支持JSR 303验证规范:该依赖项基于Java标准化的JSR 303验证规范,提供了对Bean验证(Bean Validation)功能的支持。您可以使用注解(例如
@NotNull
,@Size
,@Pattern
等)对Java Bean的属性进行验证,以确保数据的有效性。 -
集成验证器:该依赖项还集成了常用的验证器(Validator),例如Hibernate Validator,用于执行验证操作并检测验证失败的情况。
通过添加这个依赖项,您可以在Spring Boot应用程序中轻松使用验证功能,并且可以在请求参数校验、表单验证等场景下使用注解进行数据验证。
使用方式
1.通过maven引入导入依赖
<!-- 参数校验-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2.通过注解的方式对参数增加验证条件
package com.wwk.usercenter.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
/**
*
* @TableName user
*/
@TableName(value ="user")
@Data
public class User implements Serializable {
/**
* id
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 昵称
*/
private String nickname;
/**
* 用户名
*/
@NotBlank(message = "用户名不能为空")
@Length(min = 4,message = "用户名至少4位")
private String username;
/**
* 密码
*/
@NotBlank(message = "密码不能为空")
@Length(min = 8,message = "密码至少8位")
private String userPassword;
/**
* 确认密码(非数据库字段)
*/
@TableField(exist = false)
@NotBlank(message = "确认密码不能为空")
@Length(min = 8,message = "确认密码至少8位")
private String checkPassword;
/**
* 头像
*/
private String avatarUrl;
/**
* 性别 0未知 1男 2女
*/
private Integer gender;
/**
* 电话
*/
private String phone;
/**
* 邮箱
*/
@Email(message = "邮箱格式不正确")
private String email;
/**
* 状态 0:正常 1:异常
*/
private Integer userStatus;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 是否删除
*/
private Integer isDelete;
所有验证的注解 及解释
序号 | 注解 | 解释 |
---|---|---|
1 | @NotNull |
验证对象不能为null。 |
2 | @NotBlank |
验证字符串不能为null、空字符串或只包含空格。 |
3 | @NotEmpty |
验证字符串、集合或数组不能为null且必须有元素。 |
4 | @Size |
验证字符串、集合或数组的大小必须在指定范围内。 |
5 | @Min |
验证数字必须大于等于指定的最小值。 |
6 | @Max |
验证数字必须小于等于指定的最大值。 |
7 | @DecimalMin |
验证数字必须大于等于指定的最小值,支持小数。 |
8 | @DecimalMax |
验证数字必须小于等于指定的最大值,支持小数。 |
9 | @Pattern |
验证字符串必须匹配指定的正则表达式。 |
10 | @Email |
验证字符串必须是一个有效的电子邮件地址。 |
11 | @Length |
验证字符串的长度必须在指定范围内。 |
12 | @Range |
验证数字必须在指定范围内。 |
13 | @Digits |
验证数字必须是指定位数的整数或小数。 |
14 | @Positive |
验证数字必须为正数。 |
15 | @Negative |
验证数字必须为负数。 |
16 | @Past |
验证日期必须在当前时间之前。 |
17 | @Future |
验证日期必须在当前时间之后。 |
3.通过controller接收到的参数进行验证
import com.wwk.usercenter.model.entity.User;
import com.wwk.usercenter.utils.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
@RequestMapping("/register")
public R register(@RequestBody @Validated User user, BindingResult bindingResult) {
Map<String, Object> map = new HashMap<>();
// 检查绑定结果中是否存在字段错误
if (bindingResult.getFieldErrors().size() > 0) {
// 遍历每个字段错误,并将字段名和错误消息存储在map中
bindingResult.getFieldErrors().forEach(fieldError -> {
String field = fieldError.getField();
String message = fieldError.getDefaultMessage();
map.put(field, message);
});
// 记录错误消息
map.forEach((field, message) -> {
log.error("错误信息---->{}:{}", field, message);
});
// 收集错误消息并返回带有错误状态和消息的响应
List<Object> errMessages = map.keySet().stream().map(key -> map.get(key)).collect(Collectors.toList());
return R.error(444, "用户信息校验异常", errMessages);
}
// 没有字段错误,继续注册流程...
System.out.println(user);
return R.success("用户注册成功");
}
};
4.需要用到的工具类及枚举类
1.R工具类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class R<T> implements Serializable {
private Integer code;
private String msg;
private Object data;
public static R success(Object data){
return new R(1,"OK", data);
}
public static R success(Status status,Object data){
return new R(status.getCode(), status.getMessage(), data);
}
public static R success(){
return new R(1,"OK",null);
}
//失败各有不同
public static R error(Status status) {
return new R(status.getCode(), status.getMessage(), null);
}
public static R error(String msg) {
return new R(0,msg,null);
}
public static R error(Status status, Object obj) {
return new R(status.getCode(), status.getMessage(), obj);
}
public static R error(Integer code, String msg, Object obj) {
return new R(code,msg,obj);
}
}
2.对应的状态码枚举类Status
public enum Status {
LOGIN_SUCCESS(1,"登录成功"),
SUCCESS(1,"成功"),
ERROR(0,"失败"),
NOT_FIND_PATH(0,"没有找到路径"),
STATUS_ERROR(0,"请先把状态改为停售再操作"),
NOT_EXIST(0,"用户不存在"),
PASS_ERROR(0,"密码错误"),
ADMIN_DISABLE(0,"用户已禁用"),
NOT_FIND_DATA(0,"没有找到该用户对应的数据")
;
private Integer code;
private String message;
Status(Integer code, String message) {
this.code = code;
this.message = message;
}
public Integer getCode() {
return code;
}
public String getMessage() {
return message;
}
}