我正在学习Vert.x Java 框架。我正在尝试使用 Router
和 Vert.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 请求处理程序编写为 vertx
的 creatHttpServer()
方法内的匿名函数。
最佳答案
问题现已解决。问题是我没有为 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/