文章目录
前言
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里面会稍微复杂一下,我修复的方式,也不一定是完全正确的,但能够满足我的需求。
我的处理逻辑如下:
- 定义了路径,并且路径匹配上了(有的路由可以不定义路径,仅做预处理)。
- 定义了方法,方法没有匹配上。
- 没有定义模糊匹配。
这3点目前是没有问题的,第一点也处理了子路由的情况。注意:但是可能还不够,因为它在后面又判断了一系列参数,反正我没有用到。
具体代码如下:
if (path !