后端参数校验
解决:校验前端传入的参数是否符合预期
1、引入依赖
使用Spring Validation框架
java"> <!-- validation参数校验框架--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId><version>3.1.4</version></dependency>
2、校验类型
-
直接属性校验
-
对象属性校验
2.1 直接属性校验
在参数接收时,直接使用正则表达式对属性进行限制。
-
控制层添加注解@Validated
-
接口参数接收添加注解@Pattern
2.2 对象属性校验
-
实体类属性校验规则准备
-
接口参数封装 并添加注解@Validated
java">@RestController
@Validated
public class LoginController{@Autowiredprivate LoginService loginService;// 注册
@PostMapping("/register")
public Result register(@Pattern(regexp = "^\\S{5,16}$") String username, @Pattern(regexp = "^\\S{5,16}$") String password){//逻辑......}
}
实体类
java"> <!-- Lombok 用于类方法--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></dependency>
UserPO.java
java">import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import java.util.Date;
@Data // 自动生成getter和setter方法,以及toString、equals和hashCode方法
@NoArgsConstructor // 自动生成无参构造函数
@AllArgsConstructor // 自动生成全参构造函数
public class UserPO {@NotNull private Integer id; // ID
@NotEmpty // 值不能为空@Pattern(regexp = "^.{5,16}$") // 长度在5到16之间的非空字符private String username; // 用户名
@NotEmpty // 值不能为空@Pattern(regexp = "^.{5,16}$") // 长度在5到16之间的非空字符private String password; // 密码
@NotEmpty // 值不能为空@Pattern(regexp = "^.{1,10}$") // 长度在1到10之间的非空字符private String nickname; // 昵称
@NotEmpty // 值不能为空@Email // 邮箱格式private String email; // 邮箱
private String userPic; // 头像private Date createTime; // 创建时间private Date updateTime; // 修改时间
}
接口
java">@PostMapping("/update")public Result update(@RequestBody @Validated UserPO userPO) {userService.update(userPO);return Result.success("完成更新用户");}
统一返回类
java">import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
//统一响应结果
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> {private Integer code;//业务状态码 0-成功 1-失败private String message;//提示信息private T data;//响应数据
//快速返回操作成功响应结果(带响应数据)public static <E> Result<E> success(E data) {return new Result<>(0, "操作成功", data);}
//快速返回操作成功响应结果public static Result success() {return new Result(0, "操作成功", null);}
public static Result error(String message) {return new Result(1, message, null);}
}