SpringCloud框架:經由gateway網關轉接的接口返回的json數據中部分中文偶爾出現亂碼的問題


一、問題如下:

  頁面出現亂碼問題,且是偶發性的,不定時出現一次:

  

  

二、問題定位:

  1、排查編碼格式:

  前端、后台、數據庫都為UTF-8,基本排除由於編碼格式問題引起的亂碼。

  2、postMan直接訪問后台接口:

  返回的數據中包含亂碼,縮小范圍到后台。

  3、service層和controller層斷點:

  數據都是正常的,縮小范圍到返回時處理的過程。

  4、這個時候要想到的只有過濾、攔截、統一處理之類的配置文件:

  在測試庫中手動修改發生亂碼的數據,在前面加了個空格,發現返回的數據正常了,去掉空格以及發生亂碼的文字,返回的數據中后面的字符依舊是變成了亂碼,由此可以發現一個問題:

  亂碼的位置是固定的,只要是卡在這個位置的就會出現亂碼,而且可能亂碼的位置不止一個,只是因為這里恰好是中文,所以變成了亂碼。

  然后通過postMan分別使用網關轉接和直接訪問兩種方式取服務里的返回數據,結果發現,網關轉接的是有亂碼的而直接訪問的是正常的。

  在網上查閱了一些資料,終於定位了問題就在gateway網關對response的處理上。

三、問題處理:

  截斷引起的問題就用拼接來解決:

super.writeWith(fluxBody.buffer().map(dataBuffers -> {
DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory(); DataBuffer join
= dataBufferFactory.join(dataBuffers); byte[] content = new byte[join.readableByteCount()]; join.read(content); DataBufferUtils.release(join); String responseData = new String(content, Charsets.UTF_8); }); )

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM