推荐封装 assert.hastext 为 assertutils.hastext,抛出 businessexception 而非 illegalargumentexception,并配合 @controlleradvice 统一处理,保持与 spring 的空格校验语义一致。

可以直接在 Assert.hasText 的基础上封装一层,抛出 BusinessException 而非默认的 IllegalArgumentException。
封装自定义校验方法
推荐新建一个工具类(如 AssertUtils),提供静态方法替代原生 Assert.hasText:
- 方法签名保持一致,接收 CharSequence 参数和错误消息
- 内部先调用 Spring 的 Assert.hasText 判断,捕获或避免异常,再主动 throw BusinessException
- 避免 try-catch 原始异常再包装——直接判断更高效
示例代码:
public class AssertUtils {
public static void hasText(CharSequence text, String message) {
if (text == null || text.toString().trim().length() == 0) {
throw new BusinessException(message);
}
}
}
配合 @Valid 和全局异常处理器使用
若在 Controller 层使用该校验,建议统一处理 BusinessException:
- 定义 @ControllerAdvice 捕获 BusinessException,返回标准错误响应(如 code + message)
- 确保 BusinessException 继承 RuntimeException,不强制上层 try-catch
- 校验失败时,能和参数校验(@NotBlank)、业务异常等共用同一套错误格式
注意空字符串与空白字符的语义
Assert.hasText 默认对 " "(纯空格)也判为非法,这符合多数业务场景。但需确认需求:
- 如果允许纯空格,改用 StringUtils.isNotBlank(text) 判断
- 如果只禁止 null 和 "",但接受 " ",则手动检查 text == null || text.length() == 0
- 保持和 Spring 的语义一致,通常推荐沿用 hasText 的逻辑
替代方案:用断言 + 业务异常构造器
不想新增工具类?可在业务方法内内联判断:
- if (!StringUtils.hasText(param)) throw new BusinessException("用户名不能为空")
- 优点是直观、无额外依赖;缺点是重复代码多,不易统一维护
- 适合校验点少、或需差异化 message 的场景
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











