用声明式校验替代手写判空,将规则注解化到DTO字段(如@NotBlank、@NotNull),Controller参数加@Valid由框架自动校验;非DTO场景用Assert.notNull();集合返回emptyList、单对象用Optional;高频校验可封装语义化工具方法。

直接用声明式校验替代手写判空,把规则从代码里“抽出来”,写在数据载体(如 DTO)上,由框架自动执行。
用 @Valid + 注解统一声明规则
把校验逻辑从 Controller 里移走,集中到 DTO 字段上:
- @NotBlank 用于字符串,检查非 null 且非空白
- @NotNull 用于数字、日期等包装类型,只判 null 不判值
- @Email、@Pattern、@Min/@Max 覆盖格式、范围等常见约束
- Controller 方法参数加 @Valid,Spring 自动触发校验
校验失败默认返回 400,错误信息可统一拦截封装成标准响应格式,无需每个接口手动 if。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
入口处 fail-fast,不给空值往下传的机会
对非 DTO 场景(如 service 方法入参、内部调用),用 Spring 的 Assert.notNull():
- 静态导入后写 notNull(id, "id must not be null"),语义清晰、堆栈干净
- 比
if (id == null)少三行,且异常定位到调用点,不是深层方法里才崩 - 适合关键 ID、主键、必填配置等强契约场景
约定返回值,从源头减少判空需求
避免让调用方总得 if (list != null):
- 集合类方法一律返回 Collections.emptyList(),不返回 null
- 单对象查询可能为空时,考虑用 Optional<T> 显式表达“可能没有”
- 工具类或通用方法统一用 StringUtils.isBlank() 替代
== null || .length() == 0
必要时封装轻量校验工具
当项目中高频出现同类校验(如“手机号非空且合法”),可封装语义化方法:
- Check.notBlankAndMobile(phone, "phone") —— 一行完成非空 + 格式双重校验
- 消息模板自动拼接字段名,避免硬编码提示文本
- 不侵入业务逻辑,又比重复写正则更可靠

















