别再手写判空了!SpringBoot 自带的 20 个高效工具类

SpringBoot 在 spring-core 里准备了这些工具类,不用自己造轮子。下面这 20 个工具类,是我平时写代码最常用的。


1. StringUtils 字符串处理

场景:用户提交表单,判断昵称是否为空。

java
复制代码
if (StringUtils.hasText(nickname)) { // 有内容才进来 }

hasText() 自动判 null、去空格、判空字符串,一行搞定。


2. CollectionUtils 集合操作

场景:查询用户标签,可能返回 null,遍历前先判断。

java
复制代码
if (CollectionUtils.isEmpty(tags)) { return; } // 继续处理

3. ObjectUtils 对象工具

场景:日志打印对象,避免 null 指针。

java
复制代码
log.info("用户信息:{}", ObjectUtils.nullSafeToString(user));

nullSafeToString() 自动处理 null。


4. Assert 断言工具

场景:接口入参校验,ID不能为空。

java
复制代码
Assert.notNull(userId, "用户ID不能为空");

参数不对,直接抛 IllegalArgumentException


5. FileCopyUtils 文件拷贝

场景:上传文件后,保存到本地。

java
复制代码
FileCopyUtils.copy(inputStream, new FileOutputStream(targetFile));

支持流、字节数组、文件之间互拷,简单粗暴。


6. StreamUtils 流操作增强

场景:读取配置文件流,转成字符串。

java
复制代码
String content = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);

IOUtils.toString() 更轻量,而且是 Spring 自家的,不怕依赖冲突。


7. ResourceUtils 资源路径解析

场景:读取 classpath 下的证书文件。

java
复制代码
File file = ResourceUtils.getFile("classpath:cert/apiclient_cert.p12");

自动识别 classpath:file: 等协议,不用再手动拼路径了。


8. ReflectionUtils 反射工具

场景:动态调用某个私有方法(比如测试用)。

java
复制代码
Method method = ReflectionUtils.findMethod(UserService.class, "sendWelcomeEmail"); ReflectionUtils.invokeMethod(method, userService, userId);

找方法、调方法、设字段,都不用再写 setAccessible(true) 了。


9. AopProxyUtils AOP 工具

场景:想获取代理对象的真实类型。

java
复制代码
Class<?> targetClass = AopProxyUtils.ultimateTargetClass(proxy);

调试时特别有用,不然 getClass() 拿到的是 EnhancerBySpringCGLIB


10. DigestUtils 加密工具

场景:用户密码 MD5 加密(仅做演示,生产建议用 BCrypt)。

java
复制代码
String md5 = DigestUtils.md5DigestAsHex("123456".getBytes());

MD5、SHA-256 都支持,不用再引入 Commons Codec 了。


11. Base64Utils Base64 编解码

场景:把图片转成Base64嵌入HTML。

java
复制代码
String base64 = Base64Utils.encodeToString(imageBytes);

注意:它在 org.springframework.util 包下,不是JDK的。


12. StopWatch 代码耗时统计

场景:想知道某个方法执行了多久。

java
复制代码
StopWatch watch = new StopWatch(); watch.start("查询订单"); orderService.listOrders(); watch.stop(); watch.start("发送通知"); notifyService.send(); watch.stop(); System.out.println(watch.prettyPrint());

输出清晰,适合日志或调试。


13. AntPathMatcher 路径匹配

场景:判断URL是否匹配某个模式,比如 /api/user/**

java
复制代码
PathMatcher matcher = new AntPathMatcher(); boolean match = matcher.match("/api/user/**", requestPath);

Spring MVC 路由底层就是它,拿来即用。


14. MimeTypeUtils MIME类型解析

场景:根据文件后缀判断类型。

java
复制代码
MimeType mimeType = MimeTypeUtils.parseMimeType("application/json");

配合响应头设置 Content-Type 很方便。


15. ClassUtils 类操作工具

场景:判断某个类是否存在(比如动态加载功能)。

java
复制代码
boolean hasRedis = ClassUtils.isPresent("redis.clients.jedis.Jedis", null);

避免 Class.forName()ClassNotFoundException


16. SystemPropertyUtils 系统属性占位符解析

场景:配置里写了 ${user.home}/logs,想解析成真实路径。

java
复制代码
String path = SystemPropertyUtils.resolvePlaceholders("${user.home}/logs");

自动替换为系统属性值。


17. NumberUtils 数字工具

场景:字符串转数字,避免异常。

java
复制代码
int num = NumberUtils.parseNumber("123", Integer.class);

Integer.parseInt 更安全。


18. ConcurrentReferenceHashMap 并发弱引用Map

场景:缓存场景,自动回收无用对象。

java
复制代码
ConcurrentReferenceHashMap<String, Object> map = new ConcurrentReferenceHashMap<>();

ConcurrentHashMap 更省内存。


19. LinkedMultiValueMap 多值Map

场景:一个 key 对应多个 value,比如表单参数。

java
复制代码
LinkedMultiValueMap<String, String> map = new LinkedMultiValueMap<>(); map.add("hobby", "篮球"); map.add("hobby", "足球");

取出来是 List。


20. UriComponentsBuilder URL 构建工具

场景:拼接URL参数,防止手写出错。

java
复制代码
String url = UriComponentsBuilder.fromHttpUrl("http://localhost:8080/api") .queryParam("id", 1) .queryParam("name", "张三") .toUriString();

自动编码参数,安全可靠。


以上工具类都在 Spring Framework 的 spring-corespring-web 等包下,建议多用,能极大提升开发效率和代码健壮性。 转自微信公众号:程序员刘大华

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
阿生
作者分享
关于技术洁癖这块,首先说明,本人菜鸡一枚,就有感而发一下,大佬勿喷。 从一开始在学校接触spring框架开始,跟的黑马的课程,一开始用的 @Autowired 注入,从基础入门到写完苍穹外卖都是这个注解,后来跟着鱼皮做了俩个项目,发现鱼皮喜欢用 @Resource 注解, 鱼皮是腾讯大厂出来的,实力这块跟着大佬用就对了。,而且 @Autowired 注解 ide 还飘黄,于是就开始使用 @Resource。再到后来了解到黑马的天机学堂,听说是黑马的王牌项目,用的是 @RequiredArgsConstructor 注解,现在又用这个了。
4
别再乱 new ArrayList!8 大 Java 容器选型案例,一篇看懂
8
记录一下Spring的一个小玩意:response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); 写文件下载或导出Excel的场景可以用一下,不用自己再去写枚举啥的。
3
有没有懂哥讲一讲这是什么套路? 刚刚接了一个电话,问我是不是在找工作,准确说出我的姓名,学校工作经历等等,我很好奇这些东西怎么泄漏出去的,于是就配合她的提问,她的意思就是说去他们公司培训,培训不收费,然后学一段时间,可以帮助模拟面试,简历优化等等服务,然后内推一些公司,如果就业成功的话要给公司交2w块钱,质保两年。意思就是两年内被开了怎么样,后续服务不收费。我想请教一下家人们,这玩意靠谱吗🧐哦对了,他们是在boss这种招聘软件开的一些岗位让你投简历,然后拿到你的信息的。
1
今天面了一家,这种情况还真被我碰到了。。。 boss写着小程序开发,杭州,5-8k,五险不含一金。 老板35-40岁女的,桌上放了个好大的lv包包,手上的金戒指被灯光照的一闪一闪的,脸部的粉底很白和脖子颜色鲜明对比,还有点卡粉,咳咳扯远了。 自我介绍,学校经历,工作经历介绍完了后,她把她的好像叫华为RS非凡大师那一款手机,打开了一个小程序,说按照这个差不多的来做,业务是小区停车位的销售和租用服务,包括其他的比如积分抵换租用时常等等。然后后端,前端,小程序上架一条龙让我一个做,问我多大把握。我一听(卧槽,这回遇到真全栈了),我问她为啥不着外包公司做,一个人做一点不现实(何况就开这么点工资…),她说什么我忘了,给我感觉就是想省钱。我说做不了然后就走了😅
3
下载 APP