0
我是一個有vertx的新手,所以也許我做錯了什麼。我試圖實現以下路線:Vertx路由器配置
router.get("/api/users/").handler(this::getUsers);
router.route("/api/users/:username*").handler(this::checkUsername);
router.get("/api/users/:username/").handler(this::getUser);
router.put("/api/users/:username/").handler(this::addUser);
router.get("/api/users/:username/assignments/").handler(this::getAssignments);
router.post("/api/users/:username/assignments/").handler(this::addAssignment);
router.route("/api/users/:username/assignments/:assignmentId/").handler(this::checkAssignmentId);
router.get("/api/users/:username/assignments/:assignmentId/").handler(this::getAssignment);
這是避免在所有處理程序中重複此邏輯的正確方法嗎?
我試圖鏈處理程序,其中checkUsername
處理程序從路徑中讀取username
參數,嘗試查找相應的用戶,並將該用戶置於上下文中。如果找不到用戶,則返回狀態碼400。否則,調用下一個處理程序。我想將相同的原理應用於assignmentId
參數。
雖然試圖實現這一點,我相信我發現了路徑的問題,更具體地說是尾部的斜線和星號。該文檔指出尾部斜槓被忽略。這不是路徑中存在參數時的行爲。在這種情況下,斜線很重要。如果路徑定義包含一個,而請求不包含,則vertx將返回404。不管參數是否位於路徑末尾或中間位置,它都沒有區別。
對於以星號結尾的路徑也是如此。當路徑包含參數時,此功能不起作用。