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

 更新时间:2024年01月18日 09:38:10   作者: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

总结

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

相关文章

  • Java 中的语法糖,真甜

    Java 中的语法糖,真甜

    语法糖(Syntactic sugar),也叫做糖衣语法,是英国科学家发明的一个术语,通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会.这篇文章主要介绍了Java 中的语法糖知识,需要的朋友可以参考下
    2020-12-12
  • Java之Rsync并发迁移数据并校验详解

    Java之Rsync并发迁移数据并校验详解

    这篇文章主要介绍了Java之Rsync并发迁移数据并校验详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • docusaurus如何添加一个搜索功能

    docusaurus如何添加一个搜索功能

    这篇文章主要介绍了docusaurus如何添加一个搜索功能,本文通过实例图文相结合给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-04-04
  • AbstractProcessor扩展MapStruct自动生成实体映射工具类

    AbstractProcessor扩展MapStruct自动生成实体映射工具类

    这篇文章主要为大家介绍了AbstractProcessor扩展MapStruct自动生成实体映射工具类实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • druid监控无法关闭的坑以及处理方式

    druid监控无法关闭的坑以及处理方式

    这篇文章主要介绍了druid监控无法关闭的坑以及处理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • java实体对象与Map之间的转换工具类代码实例

    java实体对象与Map之间的转换工具类代码实例

    这篇文章主要介绍了java实体对象与Map之间的转换工具类代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Java的Spring框架中AOP项目的一般配置和部署教程

    Java的Spring框架中AOP项目的一般配置和部署教程

    这篇文章主要介绍了Java的Spring框架中AOP项目的一般配置和部署教程,AOP面向方面编程的项目部署结构都比较类似,因而也被看作是Spring的一种设计模式使用,需要的朋友可以参考下
    2016-04-04
  • Mybatis分页查询的实现(Rowbounds和PageHelper)

    Mybatis分页查询的实现(Rowbounds和PageHelper)

    本文主要介绍了Mybatis分页查询的实现(Rowbounds和PageHelper),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 全面解析Java设计模式之单例模式

    全面解析Java设计模式之单例模式

    这篇文章主要帮助大家全面解析Java设计模式之单例模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • SpringCloud Gateway自动装配实现流程详解

    SpringCloud Gateway自动装配实现流程详解

    Spring Cloud Gateway旨在为微服务架构提供一种简单有效的、统一的 API 路由管理方式。Spring Cloud Gateway 作为 Spring Cloud 生态系中的网关,它不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全、监控/埋点和限流等
    2022-10-10

最新评论