RequestContextHolder.getRequestAttributes()空指針問題及解決
RequestContextHolder.getRequestAttributes()空指針
現(xiàn)象
HttpServletRequest request =((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
報(bào)空指針異常:
java.lang.NullPointerException: null
原因
在代碼中開啟了子線程,在子線程中寫了此段代碼。
我這邊是由于用了parallelStream,在并行流的業(yè)務(wù)代碼中嘗試獲取Request。
解析
1、RequestContextHolder.getRequestAttributes()為null
是由于保存requestAttributes的對(duì)象是線程隔離的ThreadLocal對(duì)象,當(dāng)http請(qǐng)求發(fā)送到服務(wù)端時(shí),每個(gè)請(qǐng)求會(huì)開啟一個(gè)線程來處理,由RequestContextListener來初始化RequestContextHolder。
RequestContextHolder.setRequestAttributes(attributes);
當(dāng)開啟了子線程時(shí),不會(huì)自動(dòng)調(diào)用setRequestAttributes方法,所以從ThreadLocal中獲取時(shí)為null
2、parallelStream是會(huì)開啟子線程的,由于上述原因引發(fā)了異常
解決
1、由主線程獲取,傳遞給子線程
2、不要用并行流,parallelStream改為stream
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Java?SSM項(xiàng)目部署上線配置方法(阿里云服務(wù)器ECS?+?云數(shù)據(jù)庫RDS?MySQL)(寶塔)
這篇文章主要介紹了Java?SSM項(xiàng)目部署上線(阿里云服務(wù)器ECS?+?云數(shù)據(jù)庫RDS?MySQL)(寶塔)的圖文教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2024-01-01
java利用url實(shí)現(xiàn)網(wǎng)頁內(nèi)容的抓取
本文主要介紹了java利用url實(shí)現(xiàn)網(wǎng)頁內(nèi)容抓取的示例。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-03-03
基于Java寫minio客戶端實(shí)現(xiàn)上傳下載文件
這篇文章主要介紹了基于Java寫minio客戶端實(shí)現(xiàn)上傳下載文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
使用Java 實(shí)現(xiàn)一個(gè)“你畫手機(jī)猜”的小游戲
這篇文章主要介紹了使用Java 實(shí)現(xiàn)一個(gè)“你畫手機(jī)猜”的小游戲,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
Spring?Security入門到深入實(shí)戰(zhàn)步驟詳解
小明通過學(xué)習(xí)SpringSecurity,成功為自己的攝影網(wǎng)站添加了完整的登錄認(rèn)證鑒權(quán)功能,包括自定義用戶存儲(chǔ)、權(quán)限控制、自定義登錄頁、JWT集成以及OAuth2第三方登錄,并且對(duì)SpringSecurity有了深入的理解和認(rèn)識(shí),喜歡的朋友跟隨小編一起學(xué)習(xí)吧2025-11-11
Spring mvc AJAX技術(shù)實(shí)現(xiàn)原理解析
這篇文章主要介紹了Spring mvc AJAX技術(shù)實(shí)現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03

