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

后端参数校验

前端给后端传输数据,有时候参数需要校验,我们自己写代码会比较麻烦,我们可以使用springboot为我们提供的注解,降低这些没有必要的代码开发。

1.引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2.常用注解说明

• @NotNull:值不能为null;

• @NotEmpty:字符串、集合或数组的值不能为空,即⻓度⼤于0;
• @NotBlank:字符串的值不能为空⽩,即不能只包含空格;
• @Size:字符串、集合或数组的⼤⼩是否在指定范围内;
• @Min:数值的最⼩值;
• @Max:数值的最⼤值;
• @Pattern:字符串是否匹配指定的正则表达式;
• @Email:字符串是否为有效的电⼦邮件地址;
• @Future:⽇期是否为将来的⽇期;

• @Past:⽇期是否为过去的⽇期;

3.使用案例

@Validated:⽤于标记,某个类将触发验证

@GetMapping("/validation")
public String validation(@Validated ValidationDTO validationDTO) {return "参数校验测试";
}
@Getter
@Setter
public class ValidationDTO {@NotBlank(message = "⽤⼾账号不能为空")private String userAccount;@NotBlank(message = "⽤⼾密码不能为空")@Size(min = 5, max = 10, message = "密码⻓度不能少于6位,不能⼤于10位")private String password;@Min(value = 0, message = "年龄不能⼩于0岁")@Max(value = 60, message = "年龄不能⼤于60岁")private int age;@Email(message = "必须符合邮箱格式")private String email;@Pattern(regexp = "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$", message = "⼿机号码格式不正确")private String phone;@Past(message = "开始⽇期必须是过去的⽇期")private LocalDate startDate;@Future(message = "结束⽇期必须是未来的⽇期")private LocalDate endDate;
}

捕获异常:

@ExceptionHandler(BindException.class)
public R<Void> handleBindException(BindException e) {log.error(e.getMessage());String message = join(e.getAllErrors(),DefaultMessageSourceResolvable::getDefaultMessage, ", ");return R.fail(ResultCode.FAILED_PARAMS_VALIDATE.getCode(), message);
}private <E> String join(Collection<E> collection, Function<E, String> function, CharSequence delimiter) {if (CollUtil.isEmpty(collection)) {return StrUtil.EMPTY;}return collection.stream().map(function).filter(Objects::nonNull).collect(Collectors.joining(delimiter));
}

http://www.dtcms.com/a/286128.html

相关文章:

  • 20250718-FDU-HDUOJ钉耙编程一
  • 商汤将发布日日新6.5大模型及具身智能平台该咋看?
  • 五大开源OCR开源框架评估01-Tesseract:OCR 领域的远古巨神
  • 前端权限控制:深入理解与实现RBAC模型
  • Maven 配置文件核心配置:本地仓库、镜像与 JDK 版本
  • python学智能算法(二十四)|SVM-最优化几何距离的理解
  • Java并发编程痛点解析:从底层原理到实战解决方案
  • [3-02-03].第03章:编程模式 - 阻塞式编程与响应式编程对比
  • Python爬虫入门到实战(3)-对网页进行操作
  • 用AME获取免费SSL证书
  • 免费PDF文件格式转换工具
  • LeafletJS 与 React:构建现代地图应用
  • leetcode2_135.分发糖果
  • 信息安全性测试:渗透测试、漏洞扫描与代码审计全解析
  • 基于ECDH的隐私求交(PSI)技术发展历程
  • 进阶向:智能图像增强系统
  • 项目优化之开机自启动
  • kubernetes pod 深度解析
  • 持续同调文章阅读(四)
  • Selenium 攻略:从元素操作到 WebDriver 实战
  • 基于Spring Boot的农村农产品销售系统设计与实现
  • SGLang 推理框架深度解析:请求的调度与生命周期
  • 客户知识共享门户的核心价值:提升效率与客户体验
  • 网页的性能优化,以及具体的应用场景
  • 安卓页面卡顿测试方案详解
  • FLTK UI窗口关闭时延时卡顿问题全流程分析与优化实战
  • pip用国内的源 + Hugging Face 官方国内镜像
  • 基于华为openEuler系统安装DailyNotes个人笔记管理工具
  • LP-MSPM0G3507学习--03时钟配置
  • 如何阅读Spring源码