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

Spring Boot 使用 @NotBlank + @Validated 优雅校验参数

在日常开发中,我们常用 if (isBlank(...)) 来判断参数是否为空,但这种方式不仅繁琐,而且容易遗漏。
Spring 生态中推荐使用 JSR-303 校验注解@NotBlank@NotNull 等)配合 @Validated 实现自动校验,大幅减少手动判空逻辑。


1. 与普通判空对比

对比项传统 if 判空@NotBlank + @Validated
代码量需重复写大量 if 判断仅在 DTO 字段加注解
校验位置分散在 Controller / Service集中在 DTO
维护性校验规则难统一规则集中,易维护
功能只能判断空支持格式、长度、正则等多种校验

2. 使用步骤

(1) DTO 添加校验注解

常用注解说明:

  • @NotBlank:用于字符串,不能为空且去除空格后长度必须大于 0。
  • @Pattern:通过正则表达式验证数据格式。
  • @NotNull:用于任意对象,不能为空(非字符串)。
  • @NotEmpty:用于集合/数组,不能为空且长度大于 0。
  • @Email:校验邮箱格式。
@Data
public class UserLoginDTO {// 手机号:不能为空,并且必须符合正则规则(1开头的11位手机号)@NotBlank(message = "手机号不能为空!")@Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确!")private String phone;// 验证码:不能为空@NotBlank(message = "验证码不能为空!")private String code;
}
(2) Controller 启用校验
  • @Validated:触发参数对象的校验。
  • @RequestBody:将 JSON 请求体映射为 Java 对象。
@RestController
public class UserController {@PostMapping("/register")public Result<String> register(@Validated @RequestBody UserLoginDTO dto) {return Result.ok("注册成功");}
}
(3) 全局异常处理返回统一格式
  • @RestControllerAdvice:全局异常处理类,返回 JSON 格式结果。
  • @ExceptionHandler:指定处理某类异常的方法。
@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(MethodArgumentNotValidException.class)public Result<String> handleValidException(MethodArgumentNotValidException e) {String msg = e.getBindingResult().getFieldError().getDefaultMessage();return Result.fail(msg);}
}

3. 注意

  • ⚠ 需要配合全局异常处理器,否则返回默认 400 页面。
  • ⚠ 复杂业务校验(跨字段等)仍需自定义注解。

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

相关文章:

  • react+antd+vite自动引入组件、图标等
  • 适配安卓15(对应的sdk是35)
  • 单片机启动流程详细介绍
  • 开源WAF新标杆:雷池SafeLine用语义分析重构网站安全边界
  • vscode远程服务器出现一直卡在正在打开远程和连接超时解决办法
  • SpringBoot 整合 Langchain4j 系统提示词与用户提示词实战详解
  • IV模型(工具变量模型)
  • 《论文阅读》从特质到移情:人格意识多模态移情反应生成 ACL 2025
  • Dify-17: 扩展模型提供方
  • PyTorch简介
  • layui表格自定义导出数据(选中和全部数据)
  • Debian新一代的APT软件源配置文件格式DEB822详解
  • k8s中的微服务
  • CSS动态视口单位:彻底解决移动端适配顽疾,告别布局跳动
  • Prompt Engineering+AI工具链:打造个人专属的智能开发助手
  • 第六十六篇:AI模型的“口才”教练:Prompt构造策略与自动化实践
  • 从0开始跟小甲鱼C语言视频使用linux一步步学习C语言(持续更新)8.13
  • SplitLanzou安卓版(蓝奏云第三方客户端) v1.8.2 免费版
  • 云计算-实战 OpenStack 私有云运维:服务部署、安全加固、性能优化、从服务部署到性能调优(含数据库、内核、组件优化)全流程
  • 飞凌OK3568开发板QT应用程序编译流程
  • Nginx 超详细详解和部署实例
  • 大致计算服务器磁盘使用情况脚本
  • 从零到一:TCP 回声服务器与客户端的完整实现与原理详解
  • pycharm配置连接服务器
  • 解析Vue3中集成WPS Web Office SDK的最佳实践
  • 物理服务器和虚拟机在性能上的不同
  • 【opencv-Python学习笔记(3):色彩空间类型及其转换】
  • 【Abp.VNext】Abp.Vnext框架模块学习
  • 工业元宇宙:迈向星辰大海的“玄奘之路”
  • TCP客户端Linux网络编程设计详解