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

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.xdnf.cn/news/17650.html

相关文章:

  • 疯狂星期四文案网第38天运营日记
  • TorchDynamo - API
  • 互联网大厂Java求职面试实录:Spring Boot到微服务与AI的技术问答
  • 【Unity开发】Unity核心学习(一)
  • 如何在 Ubuntu 24.04 LTS Noble Linux 上安装 FileZilla Server
  • MyBatis 中 XML 与 DAO 接口的位置关系及扫描机制详解
  • react与vue的对比,来实现标签内部类似v-for循环,v-if等功能
  • 万字详解C++11列表初始化与移动语义
  • 如何把ubuntu 22.04下安装的mysql 8 的 数据目录迁移到另一个磁盘目录
  • 基于深度学习的苹果品质智能检测算法研究
  • Kubernetes(K8S)中,kubectl describe node与kubectl top pod命令显示POD资源的核心区别
  • .net\c#web、小程序、安卓开发之基于asp.net家用汽车销售管理系统的设计与实现
  • Android Activity 的对话框(Dialog)样式
  • LaTeX(排版系统)Texlive(环境)Vscode(编辑器)环境配置与安装
  • PostgreSQL——索引
  • SpringBoot工程妙用:不启动容器也能享受Fat Jar的便利
  • Redis:是什么、能做什么?
  • 第十三节:后期处理:效果增强
  • MySQL优化常用的几个方法
  • 使用 Python Selenium 和 Requests 实现歌曲网站批量下载实战
  • 100、【OS】【Nuttx】【构建】cmake 配置保存
  • 文心4.5专家负载均衡机制深度解析
  • 【Virtual Globe 渲染技术笔记】4 椭球面上的曲线
  • 线上Linux服务器被植入各种病毒的详细分析、处理、加固流程
  • 机器学习之TF-IDF文本关键词提取
  • EP1S20F484C6 Altera Stratix FPGA
  • imx6ull-驱动开发篇19——linux信号量实验
  • 鸿蒙开发资源导航与学习建议
  • 如何解决Unexpected token ‘<’, “<!doctype “… is not valid JSON 报错问题
  • 微服务ETCD服务注册和发现