在Vertx中获取和发布Json对象的方法



我是Java和后端开发的新手,我真的需要一些帮助。

我目前正在使用Vert。x来开发一个服务器,它接受Json请求,告诉该服务器要分析哪个文件,服务器分析该文件并以Json格式给出响应。

我已经创建了一个imagerrecognition类,其中有一个方法叫做"getNum"它获取json作为输入,并输出包含结果的json。

但是我目前有麻烦从请求中获取Json文件。

public void start(Promise<Void> startPromise) throws Exception {
JsonObject reqJo = new JsonObject();
Router router = Router.router(vertx);
router.get("/getCall").handler(req ->{
JsonObject subJson = req.getBodyAsJson();
reqJo.put("name", subJson.getValue("name"));
req.end(reqJo.encodePrettily());
});
router.post("/getCall").produces("*/json").handler(plateReq ->{
plateReq.response().putHeader("content-tpye", "application/json");
JsonObject num = imageRecogService.getNum(reqJo);
plateReq.end(num.encodePrettily());
});
vertx.createHttpServer().requestHandler(router).listen(8080)
.onSuccess(ok -> {
log.info("http server running on port 8080");
startPromise.complete();
})
.onFailure(startPromise::fail);

}}

对代码的任何反馈或解决方案将不胜感激!!提前谢谢你!!

您的代码中有几个错误:

1:

JsonObject reqJo = new JsonObject();
Router router = Router.router(vertx);
router.get("/getCall").handler(req ->{
reqJo.put("name", subJson.getValue("name"));
});

您正在修改处理程序中的reqJo对象。我不确定这是否线程安全,但更常见的做法是在请求处理程序内部分配JsonObject对象,并使用RoutingContext.data()将它们传递给后续处理程序。

2:您的两个处理程序不在同一个方法上(第一个是GET,第二个是POST)。我想你希望它们都是POST。

3:为了提取多部分主体数据,您需要使用POST,而不是GET。

4:您需要在读取请求体的任何处理程序之前附加BodyHandler。例如:

// Important!
router.post("/getCall").handler(BodyHandler.create());
// I changed to posts
router.post("/getCall").handler(req ->{
JsonObject subJson = req.getBodyAsJson();
reqJo.put("name", subJson.getValue("name"));
req.end(reqJo.encodePrettily());
});

否则,getBodyAsJson()将返回null。

根据RoutingContext#getBodyAsJson的文档,"上下文必须首先被路由到一个BodyHandler来填充。">

阅读更多:BodyHandler.

相关内容

  • 没有找到相关文章

最新更新