记录vert.x的几个BUG

博客记录了在使用vert.x 3.5.2版本时遇到的两个问题及其解决方案:1. 当HTTP请求方法不匹配时,原本应返回405状态码却返回404,通过修改RouteImpl类中的判断逻辑解决了此问题。2. 使用MySQLClient创建的客户端在查询bit(1)类型的字段时返回byte[]而非Boolean,导致不兼容MySQL规范,建议切换到JDBC进行处理。
摘要由CSDN通过智能技术生成

前言

vert.x本身也有一些bug,用的过程当中发现了,一定会去找到根本原因,能修复的就直接修复了,修复不了的就想办法跳过。
我这边用的是3.5.2。版本有点旧了,至于新的有没有修复,我也就不去探究了,简单记录一下。

注意:修复框架的代码,一定要做好注释和笔记,以应对升级框架版本的情况。

HTTP请求方法不正确的时候状态码是404,应该是405

发布一个接口,定义的是get,你却用post调用,vertx返回的是404,准确一些应该是405。我直接说怎么修复的吧。
第一个类:io.vertx.ext.web.impl.RouteImpl
具体的方法是:

synchronized boolean matches(RoutingContextImplBase context, String mountPoint, boolean failure)

大约在230行。
这个方法是用来判断当前请求是否匹配你定义发布的接口,非常关键的方法。
有下面一行代码:

    if (!methods.isEmpty() && !methods.contains(request.method())) {
   
      return false;
    }

我发布了一个路由,而且定义了一些方法,但是你请求的方法并不在里面,直接返回false。外层在处理的时候,它就会认为没有找到,因此我们要做一件事情:要能够准确捕获到405的情况,并且在外层可以捕获到,把405的信息返回调用方

那怎么才能算405呢?常见的就是路径匹配上了,但方法不对,就是了。
但在vertx里面会稍微复杂一下,我修复的方式,也不一定是完全正确的,但能够满足我的需求。

我的处理逻辑如下:

  1. 定义了路径,并且路径匹配上了(有的路由可以不定义路径,仅做预处理)。
  2. 定义了方法,方法没有匹配上。
  3. 没有定义模糊匹配。

这3点目前是没有问题的,第一点也处理了子路由的情况。注意:但是可能还不够,因为它在后面又判断了一系列参数,反正我没有用到。

具体代码如下:

        if (path !
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值