gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:53:32 25 4
gpt4 key购买 nike

我正在学习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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com