RequestContextHolder.getRequestAttributes()空指针问题及解决
RequestContextHolder.getRequestAttributes()空指针
现象
HttpServletRequest request =((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
报空指针异常:
java.lang.NullPointerException: null
原因
在代码中开启了子线程,在子线程中写了此段代码。
我这边是由于用了parallelStream,在并行流的业务代码中尝试获取Request。
解析
1、RequestContextHolder.getRequestAttributes()为null
是由于保存requestAttributes的对象是线程隔离的ThreadLocal对象,当http请求发送到服务端时,每个请求会开启一个线程来处理,由RequestContextListener来初始化RequestContextHolder。
RequestContextHolder.setRequestAttributes(attributes);
当开启了子线程时,不会自动调用setRequestAttributes方法,所以从ThreadLocal中获取时为null
2、parallelStream是会开启子线程的,由于上述原因引发了异常
解决
1、由主线程获取,传递给子线程
2、不要用并行流,parallelStream改为stream
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
AbstractProcessor扩展MapStruct自动生成实体映射工具类
这篇文章主要为大家介绍了AbstractProcessor扩展MapStruct自动生成实体映射工具类实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-01-01
Mybatis分页查询的实现(Rowbounds和PageHelper)
本文主要介绍了Mybatis分页查询的实现(Rowbounds和PageHelper),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2022-01-01


最新评论