一、问题如下:
页面出现乱码问题,且是偶发性的,不定时出现一次:
二、问题定位:
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); }); )