java - 在简单的 vertx 路由器实现中获取空指针异常

标签 java vert.x

我正在学习Vert.x Java 框架。我正在尝试使用 RouterVert.x web 创建一个简单的 API。下面是我的代码:

我的主类 - MainVerticle.java(Verticle):

public class MainVerticle extends AbstractVerticle{

    final int VA_PORT = 7535;

    @Override
    public void start() throws Exception {

        // URL routers
        IController controller = new RequestController();

        Router router = Router.router(vertx);

        router.post("/vassist").handler(
                routingContext -> controller.opController(routingContext) 
        );

        vertx.createHttpServer().requestHandler(router::accept).listen(VA_PORT, asyncResult -> {

            if(asyncResult.succeeded()) {
                LOGGER.info("Verticle deployed successfully. Listening on port: " + VA_PORT);
            }
            else {
                LOGGER.error("Could not start a HTTP server", asyncResult.cause());
            }

        });
    }

    @Override
    public void stop() throws Exception {
    }

    public static void main(String[] args) {
        Vertx vertx = Vertx.vertx();

        // Deploy main verticle
        vertx.deployVerticle(new MainVerticle());
    }

}

接口(interface) - IController.java:

public interface IController {
    public void opController(RoutingContext routingContext);
}

RequestController.java 实现上述接口(interface):

public class RequestController implements IController {

    @Override
    public void opController(RoutingContext routingContext) {
        JsonObject jso = routingContext.getBodyAsJson();
        System.out.println("Received json body as : " + jso.encodePrettily());
    }

}

上面的代码成功部署了 verticle 并创建了一个 http 服务器,但是,每当我发送带有示例 json 正文的 HTTP POST 时,我都会在 System.out.println 处收到空指针异常。 out.println("收到的 json 正文为:"+ jso.encodePrettily()); of RequestController.java

我的 HttpServer 实现不正确吗?请注意,我不想将 http 请求处理程序编写为 vertxcreatHttpServer() 方法内的匿名函数。

最佳答案

问题现已解决。问题是我没有为 opController 方法中收到的请求实现 bodyhandler。正确的实现如下:

public void opController(RoutingContext routingContext) {
        routingContext.request().bodyHandler(bodyHandler -> {
            JsonObject jso = bodyHandler.toJsonObject();
            System.out.println("Received json body as : " + jso.encodePrettily());
        });

        // Complete request
        routingContext.response().setStatusCode(200).end("Done!");
    }

关于java - 在简单的 vertx 路由器实现中获取空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55227172/

相关文章:

java - Vertx多线程verticle实例和工作池大小

java - 带参数的 VertX SQL 查询如何使用 LIKE?带通配符

event-handling - Vert.x - RxJava - zip observables

JAVA - 从文本文件中读取,识别新行

java - 使用 -cluster 选项启动时 Vert.x 性能下降

java - 将数组列表保存到文件中时遇到问题

java - 如何在 JPanel 上添加多个图层

java - Vertx.io GET 无提示失败

java - 如何从 SQLite 表中获取所有行?

java - 如何绕过这个多重继承问题?