如何使用Vert.x RoutingContext返回JSON数组
结论
该需求完全可以实现,Vert.x 原生提供了JSON序列化能力和Router响应输出能力,无需引入额外第三方依赖即可完成开发。
核心实现步骤
- 先组装要返回的JSON列表:可直接使用Vert.x内置的
JsonArray承载多个JsonObject,也可以直接传入POJO集合自动序列化 - 配置响应头的Content-Type为
application/json,避免返回乱码 - 将
JsonArray序列化后写入HTTP响应即可
代码示例
import io.vertx.core.AbstractVerticle; import io.vertx.core.http.HttpHeaders; import io.vertx.core.json.JsonArray; import io.vertx.core.json.JsonObject; import io.vertx.ext.web.Router; public class JsonListApiVerticle extends AbstractVerticle { @Override public void start() { Router router = Router.router(vertx); // 示例接口:返回商品列表 router.get("/api/goods/list").handler(routingContext -> { // 方式1:手动构造JSON对象列表 JsonArray goodsList = new JsonArray() .add(new JsonObject().put("id", 1001).put("name", "无线耳机").put("stock", 32)) .add(new JsonObject().put("id", 1002).put("name", "机械键盘").put("stock", 18)) .add(new JsonObject().put("id", 1003).put("name", "便携显示器").put("stock", 9)); // 方式2:直接传入POJO集合自动序列化(可选) // List<GoodsPO> poList = goodsMapper.selectList(); // JsonArray goodsList = new JsonArray(poList); // 输出响应 routingContext.response() .putHeader(HttpHeaders.CONTENT_TYPE, "application/json; charset=utf-8") .end(goodsList.encode()); }); // 启动HTTP服务监听8080端口 vertx.createHttpServer() .requestHandler(router) .listen(8080); } }
注意事项
- 如果使用POJO序列化,确保POJO类提供了公共的getter方法、无参构造函数,否则Vert.x无法完成自动序列化
- 返回大体积JSON列表时,可搭配
routingContext.response().setChunked(true)分块输出,避免内存占用过高
内容的提问来源于stack exchange,提问作者Tung Thanh
相关产品推荐
相关产品推荐

