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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Spring ApplicationContextAware 接口的作用及使用方式
Spring提供了许多回调接口,用于Bean生命周期中执行特定的操作,通过实现ApplicationContextAware接口,Spring提供了一种便捷的方式让 Bean获取对Spring容器的引用,本文介绍ApplicationContextAware接口的作用、使用方式,以及在实际应用中的常见场景,感兴趣的朋友一起看看吧2024-01-01SpringMVC之RequestContextHolder详细解析
这篇文章主要介绍了SpringMVC之RequestContextHolder详细解析,正常来说在service层是没有request的,然而直接从controlller传过来的话解决方法太粗暴,后来发现了SpringMVC提供的RequestContextHolder,需要的朋友可以参考下2023-11-11SpringCloud Gateway HttpWebHandlerAdapter链路调用请求流程介
Spring Cloud Gateway旨在为微服务架构提供一种简单有效的、统一的 API 路由管理方式。Spring Cloud Gateway 作为 Spring Cloud 生态系中的网关,它不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全、监控/埋点和限流等2022-10-10Spring配置文件解析之BeanDefinitionReader详解
这篇文章主要介绍了Spring配置文件解析之BeanDefinitionReader详解,ApplicationContext.xml配置文件解析成Document对象,真正对xml中元素解析的类是在BeanDefinitionDocumentReader的实现类中来完成的,需要的朋友可以参考下2024-02-02
最新评论