关于Spring 中 StringUtils.isEmpty 被弃用如何正确使用
作者:Knight_AL
在日常 Spring 开发中,StringUtils.isEmpty() 几乎是很多人的“肌肉记忆”。
但如果你最近升级了 Spring Boot / Spring Framework,IDEA 很可能已经给你打上了 @Deprecated。
❓为什么一个用了这么多年的方法要被弃用?
❓弃用后应该用什么替代?
❓hasText和hasLength到底该怎么选?

一、StringUtils.isEmpty 已被弃用
被弃用的方法是下面这个:
@Deprecated public static boolean isEmpty(@Nullable Object str)
是的,你没看错,参数类型是 Object。
二、为什么 Spring 要弃用它?
1️⃣ 参数类型太宽泛,语义不清
StringUtils.isEmpty(123); // 编译居然能通过 StringUtils.isEmpty(new Object());
这会让代码缺乏可读性和明确意图,你根本不知道调用者想判断什么。
2️⃣ “Empty” 的语义容易被误解
很多人误以为:
StringUtils.isEmpty(" "); // true ❌
但实际上结果是:
false
👉 只要字符串长度 > 0,就不算 empty
这在用户输入校验中是非常危险的。
3️⃣ 与更明确的方法职责重叠
Spring 早就提供了语义更清晰的方法:
hasLengthhasText
既然如此,继续保留 isEmpty(Object) 反而容易误用。
三、Spring 官方推荐的替代方案
✅ 1. StringUtils.hasLength
判断:是否有长度(不关心内容是不是空白)
StringUtils.hasLength(str)
等价于:
str != null && str.length() > 0
示例:
StringUtils.hasLength(null); // false
StringUtils.hasLength(""); // false
StringUtils.hasLength(" "); // true
📌 适合:底层工具方法、纯字符串存在性判断
✅ 2. StringUtils.hasText(最常用)
判断:是否包含至少一个非空白字符
StringUtils.hasText(str)
等价于:
str != null && str.trim().length() > 0
示例:
StringUtils.hasText(" "); // false
StringUtils.hasText("\n\t"); // false
StringUtils.hasText("abc"); // true
📌 适合:接口参数、表单校验、配置校验
四、对比一眼就懂
| 输入值 | isEmpty(弃用) | hasLength | hasText |
|---|---|---|---|
null | true | false | false |
"" | true | false | false |
" " | false | true | false |
"abc" | false | true | true |
五、旧代码如何正确迁移?
❌ 旧写法(不推荐)
if (StringUtils.isEmpty(str)) {
// ...
}
✅ 新写法(按意图选择)
原来只想判断 null 或 “”
if (!StringUtils.hasLength(str)) {
// ...
}
原来是校验“用户是否输入了内容”
if (!StringUtils.hasText(str)) {
throw new IllegalArgumentException("参数不能为空");
}
六、真实项目中的最佳实践
✔ Controller / Service 参数校验
if (!StringUtils.hasText(username)) {
throw new BizException("用户名不能为空");
}
✔ 配置值校验
Assert.hasText(apiKey, "apiKey must not be empty");
❌ 不再使用
StringUtils.isEmpty(...)
七、总结
StringUtils.isEmpty已被弃用,不建议继续使用- 不要再用“空不空”这种模糊判断
- 用 方法名表达你的真实意图
- 👉
hasLength - 👉
hasText
- 👉
到此这篇关于关于Spring 中 StringUtils.isEmpty 被弃用如何正确使用的文章就介绍到这了,更多相关spring stringutils.isempty使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
