我是一个新的java& vertx用户。我想得到像json格式的结果,但在运行时第二个查询结果是空的。有人可以帮帮我吗?
我想获得Json数据:
[
{
"id",
"name",
"offers":[
{"id2",
"name2"},
{"id2",
"name2"
}
]
},
{
"id",
"name",
"offers":[
{"id2",
"name2"},
{"id2",
"name2"
}
]
}
]
结果是:
[
{
"id",
"name",
},
{
"id",
"name",
}
]
我的代码是:
moConn.query("select id, name from test1"
, query1 -> {
if(!query1.failed() && query1.result().getNumRows() != 0){
JsonArray arr = new JsonArray();
query1.result().getRows().forEach(re ->{
moConn.query("select id2, name2 from test2"
,query2 -> {
if(!query2.failed() && query2.result().getNumRows() != 0){
JsonArray arr2 = new JsonArray();
query2.result().getRows().forEach(arr2::add);
re.put("offers",arr2);
}
});
arr.add(re);
});
routingContext.response()
.putHeader("content-type", "application/json; charset=UTF-8")
.end(arr.encodePrettily());
}else {
routingContext.response()
.putHeader("content-type", "application/json; charset=UTF-8")
.end();
}
});
答案 0 :(得分:0)
您在处理第二个查询结果之前返回响应。执行完最后一个查询select id2, name2 from test2
后,您需要进行回调,然后才调用:
routingContext.response()
.putHeader("content-type", "application/json; charset=UTF-8")
.end(arr.encodePrettily());
作为一个注释,你应该小心这一点,因为你正在做所谓的N+1
问题。