3 回答
TA贡献1909条经验 获得超7个赞
问题现已修复。问题是我没有在opController方法中为收到的请求提供身体处理程序。正确的实现如下:
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!");
}
TA贡献1818条经验 获得超3个赞
您可以通过定义一次BodyHandler来简化,并将body作为缓冲区,字符串,json或json数组(如波纹管)获取:
public class HttpServer extends AbstractVerticle {
@Override
public void start(Future<Void> startFuture) {
var router = Router.router(vertx);
//notice here
router.route().handler(BodyHandler.create());
// a bonus :)
router.route().handler(LoggerHandler.create(LoggerFormat.DEFAULT));
router.post("/api/books").handler(this::getAllBooks);
vertx.createHttpServer()
.requestHandler(router)
.listen(config().getInteger("server.port", 9000), lh -> startFuture.complete());
}
private void getAllBooks(RoutingContext rc) {
// do something with the body
JsonObject jso = rc.getBodyAsJson(); // or String body = getBodyAsString();
System.out.println("Received json body as : " + jso.encodePrettily());
//respond
rc.response().setStatusCode(HttpResponseStatus.OK.code()).end("Done!");
}
}
TA贡献1815条经验 获得超10个赞
Vertx HttpServer 将捕获路由处理程序中发生的所有异常,然后返回状态代码 = 500 的 http 响应(=“内部服务器错误”)。因此,http服务器不会因任何异常而停止。
使用“try catch”来捕获异常,例如:
String abc = null;
try {
// add your code here
abc.charAt(0);
} catch (Exception e) {
e.printStackTrace();
}
处理异常的其他方法:
router.route("/*").failureHandler(rc->{
int statusCode = rc.statusCode();
System.out.println("status code = " + statusCode );
rc.response().setStatusCode(statusCode).end("failureHandler here");
});
添加回答
举报