Я новичок в 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. Не имеет значения, находится ли параметр в конце пути или посередине.
То же самое и с путями, оканчивающимися звездой. Эта функция не работает, если путь содержит параметр.