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); }); )

  

原文地址:https://www.cnblogs.com/guobin-/p/14941345.html