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

      

  • 相关阅读:
    MS SQL SERVER导出表结构到Excel
    Ajax.ActionLink用法
    Layer弹出层关闭后刷新父页面
    Ajax.BeginForm提示不支持live属性或方法的错误
    BootStrap带样式打印
    利用JQuery jsonp实现Ajax跨域请求 .Net 的*.handler 和 WebService,返回json数据
    Bootstrap打印问题
    EF的表左连接方法Include和Join
    vs code的local history插件
    idea debug的drop frame,set watch和设置过滤条件
  • 原文地址:https://www.cnblogs.com/guobin-/p/14941345.html
Copyright © 2020-2023  润新知