当前位置: 首页 > 知识库问答 >
问题:

正在vertx中中止请求

嵇浩然
2023-03-14

我有一个创建处理程序,其中包含这样的验证方法:

void create(){
    validate();
    .
    .
    .
    insertInDb();
    routingContext.response().setStatusCode(HttpResponseStatus.CREATED.code()).end(...));
    }

在validate方法中,我检查输入,如果输入无效,我将其写入响应:

void validate(){
if(input not valid){
   routingContext.response().setStatusCode(HttpResponseStatus.NOT_ACCEPTABLE.code()).end();
}
}

问题是,如果输入无效,我希望处理程序结束。但发生的情况是,如果输入无效,它会设置statusCode并写入响应,然后它继续创建方法中的流程,当它运行最后一行时,它想再次写入响应并抛出异常。我想在输入无效时结束或中止请求。我该怎么做?

}

共有1个答案

越文康
2023-03-14

在Vert. x中,您可以为一个路由使用多个处理程序。如果您有一个像POST /users/login这样的路由,那么您可以有一个处理程序来验证请求并仅在它有效时调用下一个处理程序。现在第二个处理程序不会被调用,您也不会有再次发送响应的问题。

您可以这样做,例如:

...
router.post("/users/login")
  // first, the validation handler
  .handler((routingContext) -> {
    if(input not valid) {
      routingContext.response()
        .setStatusCode(HttpResponseStatus.NOT_ACCEPTABLE.code())
        .end();
    } else {
      routingContext.next();
    }
  })
  // this handler will only be called if the input was valid!
  .handler((routingContext) -> {
    insertInDb();
    routingContext.response()
      .setStatusCode(HttpResponseStatus.CREATED.code())
      .end(...));
  });
...

您可以在这里的文档中找到一个示例。

 类似资料:
  • 我正在关注Jenkov关于vertx的教程。这里有两个文件: MyVerticle.java: 和VertxVerticleMain。爪哇: 运行,我看到在Eclipse的控制台中,但不知道如何在中调用。 Jenkov说,当Vert. x关闭并且你的顶点需要停止时,会调用Stop()方法。我如何关闭我的Vert. x并停止这个顶点?我想看到在控制台中。

  • 他们在vertx网站上的文档不太清楚如何接收请求的正文。 我得到错误: 如果他们甚至不把它放在他们的文件里,我怎么知道该怎么称呼它...

  • 问题内容: 通过某些错误消息中止我的 API 服务的方式是什么? 链接致电我的服务: 要给我的服务打电话,客户需要发送一个Json和一些参数。 我想测试我获得的参数是否正确,否则,我想发送一条错误消息。 响应应为Json代码 我尝试过,他们停止了服务,而不仅仅是通话请求。中止通话,但阻止我发送这是我的错误消息。 我读了一些有关 恐慌,推迟,恢复的信息, 但我真的不知道如何使用它们来解决此问题。 作

  • 调用我的服务的链接: 要调用我的服务,客户机需要发送一个Json和一些params。 我想测试我得到的参数是否正确,如果不正确,我想发送一条错误消息。 我尝试了和,它们停止服务,而不仅仅是调用请求。中止调用,但它阻止我发送,这是我的错误消息。 我读过一些关于恐慌、延迟、恢复的东西,但我真的不知道如何使用它们来解决这个问题。 工作: 但我只能在main函数中使用它,因为在其他函数中,它只退出func

  • 我有一个小的vertx应用程序。一个超文本传输协议垂直获取一个请求,并通过带有请求-响应模式的eventbus发送它。所以类似于: 在DB Vertical中,我使用消费者获取一条消息,发送到DB,进行一些更改并发送回HTTP verticle。我的问题是,我有一个必须进行大量检查的删除操作,所以这个过程可能需要10秒钟。此时HTTP verticle仍然可以获得一些新请求,但DB consume

  • 在Vertx WebClient中记录传出http请求和响应的最简单方法是什么。我正在寻找类似于httpserver LoggerHandler的东西,但接下来是webclient的输出请求。