2016-06-12 98 views
1

如何在失敗處理程序中檢索傳遞給RoutingContext.fail(int)的狀態代碼(使用Route.failureHandler註冊)?Vertx:如何在失敗處理程序中獲取失敗()狀態碼?

E.g.如果某些路線的處理時間過長,則可以通過TimeoutHandler來中斷,該TimeoutHandlerRoutingContext上調用fail(408)fail方法隨後調用失敗處理程序(如果已註冊)。但是我無法找到任何方式(除了依賴於實現反射&)如何找出處理程序本身爲什麼它被稱爲:

  • RoutingContext.failure()回報null
  • 狀態代碼似乎是公開的,只有設置的RoutingContextImpl領域,尚未HttpServerResponse

回答

2

你應該能夠看到錯誤代碼,因爲是針對特定場景單元測試:

router.route(path).handler(rc -> { 
    rc.fail(400); 
}).failureHandler(frc -> { 
    assertEquals(400, frc.statusCode()); 
    frc.response().setStatusCode(400).setStatusMessage("oh dear").end(); 
}); 

你怎麼註冊你的處理程序?和失敗處理程序?

+0

使用'Route.handler()'和'Route.failureHandler()',完全按照你的榜樣。 – czerny

+0

根據測試,這應該工作,爲了完成你使用什麼版本?請注意,3.3.0將在幾天後出來 –

+0

我正在使用3.2.1。 – czerny

1

不知道關於舊版本Vert.x的,而是從3.0.0向上:

eventBus.send("some.address", "some value", event -> { 
    if (event.succeeded()) { 
    System.out.println("Received reply: " + event.result().body()); 
    } else { 
    ReplyException cause = (ReplyException) event.cause(); 
    String failMessage = cause.getMessage(); 
    int failCode = cause.failureCode(); 
    } 
}); 
相關問題