webflux解决get请求中文乱码问题

     Webflux是Spring中一个非阻塞的框架,使用方式类似SpringMVC.最近用该框架做了个网关服务的重构.因为其中遇到了些问题.比较难解决的就是这个GET请求如果包含中文且发送时候没有用URL编码的话,直接就乱码了.无法进行后续的处理了.报错如下:

     

org.springframework.http.server.reactive.ReactorHttpHandlerAdapter - Invalid URL for incoming request: Illegal character in query at index

      发现这个问题后.首先尝试通过Filter的方式来解决乱码问题.按照官方文档增加了filter.发现ReactorHttpHandlerAdapter这个方法是在filter之前执行.该方法尝试失败.

     后面通过查看netty源码发现其最后会调用 HttpServerCodec.decode  到

HeaderParser.process 方法使用的是ASC解码的方式.每次读取的是一个byte位信息.故而产生了乱码.要想解决这个问题.那么需要做类似于tomcat的 URIEncoding="utf-8"的设置应该就可以解决改问题.后面查看官方文档.没有找到如何设置.到此该方法展示无效了.顺便给官方提交了一个issues

理论上应该是可以设置的.如果你知道方法可以留言告诉我.

     这个方法也行不通.那我打算直接从底层的服务器容器下手来解决该问题.因为官方文档上指出webflux的底层容器是支持tomcat,jetty,servlet3.1+,netty等方式.因为jetty默认就是支持URIEncoding="utf-8"的,所以这里我直接用jetty来对默认的netty容器进行替换.

    只需要修改pom文件如下:

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-webflux</artifactId>
      <exclusions>
        <exclusion>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-reactor-netty</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
   <!-- use jetty default URIEncoding is UTF-8 ,Chinese GET request garbled -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency>

再次运行后,发现已经解决该问题了

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值