当前位置: 首页 > article >正文

参数校验 Spring Validation框架

后端参数校验

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

1、引入依赖

使用Spring Validation框架

        <!-- 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

@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){
     //逻辑......
 }
}

实体类

        <!-- Lombok  用于类方法-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.30</version>
        </dependency>

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<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);
    }
}


http://www.kler.cn/a/510282.html

相关文章:

  • AUTOSAR从入门到精通-自动驾驶测试技术
  • 从零开始:Gitee 仓库创建与 Git 配置指南
  • Ubuntu VPS 上 Docker 部署 Nginx 服务器详细教程
  • Vue篇-07
  • Android 12.0 息屏休眠后立即启动屏保功能实现
  • HarmonyOS Next 实现登录注册页面(ARKTS) 并使用Springboot作为后端提供接口
  • 探秘Shortest与Stagehand:开启高效测试与自动化新篇
  • 【Idea】编译Spring源码 read timeout 问题
  • FastGPT结合New-api,遍享各类大模型
  • pytest全局配置文件pytest.ini
  • rabbitmq安装延迟队列
  • MinerU:高效智能PDF文档解析工具完全指南
  • pg_sql关于时间的函数
  • 刷题小白——排序
  • Vue + Nuxt 全面解析:构建高效 SSR 与 SSG 应用的最佳实践
  • CORS:跨域访问、如何在Nginx中配置允许跨域访问
  • Flink(十):DataStream API (七) 状态
  • SVG To Font 创建自己的字体图标库
  • 分布式锁详解
  • 从零开始学数据库 day2 DML
  • G1原理—7.G1的GC日志分析解读
  • python+django+Nacos实现配置动态更新-集中管理配置(实现mysql配置动态读取及动态更新)
  • Node.js 与 JavaScript 是什么关系
  • 47,【5】BUUCTF web lovesql
  • 联德胜w801开发板(四)实现腾讯云mqtt的订阅和发布
  • 浅谈 JVM