封装校验核心是将数据校验“收口”到对象内部或框架层,确保只允许合法值进入业务流程;JavaBean中用private成员+带逻辑的setter、JSR-303注解、数据库约束及Filter/AOP统一拦截共同构成多层防护体系。

封装时校验入参,核心是把数据校验逻辑“收口”到对象内部或框架层,不让非法值越过边界进入业务流程。重点不在“能不能赋值”,而在于“只允许合法值通过”。
在 JavaBean 内部用 setter 做基础校验
这是最直接的封装手段:成员变量设为 private,提供带判断逻辑的 public setter 方法。
- 年龄只能是 0–150:setter 中用 if 检查范围,不满足就跳过赋值或抛异常
- 用户名不能为空且长度 2–20:检查字符串非 null、非 blank,再校验 length
- 邮箱格式可粗略用
contains("@"),但更推荐交给专门校验工具处理
用 JSR-303/JSR-349 注解统一声明式校验
Spring Boot 项目默认支持(依赖 spring-boot-starter-validation),在 DTO 或实体类字段上加注解,比手写 if 更清晰、可复用。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
@NotNull:字段不能为 null(但可以是空字符串) -
@NotBlank:不能为 null、不能 blank(去掉前后空格后长度 > 0) -
@Min(1) @Max(100):适用于数值型字段 -
@Pattern(regexp = "^1[3-9]\d{9}$"):校验手机号等固定格式 - Controller 方法参数加
@Valid,框架自动触发校验并拦截非法请求
数据库层加唯一索引和约束,兜底防并发脏数据
应用层校验再严密,也挡不住并发写入、绕过接口直连 DB、或事务未提交时的中间态。必须靠数据库强制约束。
立即学习“Java免费学习笔记(深入)”;
- 手机号字段加
UNIQUE KEY,避免重复注册 - 订单号 + 用户 ID 组合建联合唯一索引,防止同一用户重复下单
- 字段加
NOT NULL、CHECK(age >= 0)等 DDL 级限制
结合 Filter 或 AOP 做前置通用校验
对全局性规则(如请求头必含 token、IP 白名单、接口频次)不适合写在每个 DTO 里,可用 Filter 统一拦截处理。
- 读取 Header 中的鉴权信息,缺失或无效则直接返回 401
- 解析请求体前先校验 JSON 结构是否完整,避免后续解析报错
- 记录非法参数特征,用于风控或日志告警

















