java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > RequestContextHolder.getRequestAttributes()空指针

RequestContextHolder.getRequestAttributes()空指针问题及解决

作者:nedjie

这篇文章主要介绍了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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文