一、問題如下:
頁面出現亂碼問題,且是偶發性的,不定時出現一次:
二、問題定位:
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); }); )