RoutingContext.vertx()在Vertx的BodyHandler中为空(文件上传期间为Nullpointerexception)

时间:2018-02-15 10:56:14

标签: file-upload nullpointerexception vert.x

只要它回答了标准的json请求,我的vertx实例就可以正常工作。一旦我尝试了文件上传(已经在其他vertx项目中工作),我在Vertx的BodyHandlerImpl中得到了一个N​​PE。 context.vertx()返回null:

    SEVERE: Unexpected exception in route
java.lang.NullPointerException
    at io.vertx.ext.web.handler.impl.BodyHandlerImpl$BHandler.<init>(BodyHandlerImpl.java:124)
    at io.vertx.ext.web.handler.impl.BodyHandlerImpl.handle(BodyHandlerImpl.java:65)
    at io.vertx.ext.web.handler.impl.BodyHandlerImpl.handle(BodyHandlerImpl.java:40)
    at io.vertx.ext.web.impl.RouteImpl.handleContext(RouteImpl.java:217)
    at io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:78)
...

您可以在此处克隆最小示例以重现错误:https://github.com/cburnicki/vertx-file-upload-test

1 个答案:

答案 0 :(得分:3)

您Vert.x Web Router不能是Verticle类的最终成员:

public class MainApiVerticle extends AbstractVerticle {
  final Router router = Router.router(vertx); // vertx field is not set yet
  // ...
}

创建时,未部署Verticle,因此父类的vertx字段仍为null

如果您需要它作为字段,请使用start方法初始化它:

public class MainApiVerticle extends AbstractVerticle {

    Router router;

    @Override
    public void start(Future<Void> startFuture) throws Exception {
        router = Router.router(vertx);
        // ...
    }
}