参数校验 Spring Validation框架

后端参数校验

解决:校验前端传入的参数是否符合预期

1、引入依赖

使用Spring Validation框架

        
        
            org.springframework.boot
            spring-boot-starter-validation
            3.1.4
        

2、校验类型

  • 直接属性校验

  • 对象属性校验

2.1 直接属性校验

在参数接收时,直接使用正则表达式对属性进行限制。

  • 控制层添加注解@Validated

  • 接口参数接收添加注解@Pattern

 
  

2.2 对象属性校验

  • 实体类属性校验规则准备

  • 接口参数封装 并添加注解@Validated

@RestController
@Validated
public class LoginController{
   
    @Autowired
    private LoginService loginService;
    
    // 注册
@PostMapping("/register")
public Result register(@Pattern(regexp = "^\\S{5,16}$") String username, @Pattern(regexp = "^\\S{5,16}$") String password){
     //逻辑......
 }
}

实体类

        
        
            org.projectlombok
            lombok
            1.18.30
        

UserPO.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; // 修改时间
}

接口

@PostMapping("/update")
    public Result update(@RequestBody @Validated UserPO userPO) {
        userService.update(userPO);
        return Result.success("完成更新用户");
    }

统一返回类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
​
//统一响应结果
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
    private Integer code;//业务状态码  0-成功  1-失败
    private String message;//提示信息
    private T data;//响应数据
​
    //快速返回操作成功响应结果(带响应数据)
    public static  Result 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);
    }
}

你可能感兴趣的:(java,spring,boot)