私は頂点の初心者なので、何か間違っているかもしれません。次のルートを実装しようとしています。
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 を返します。パラメーターがパスの末尾にあるか途中にあるかは関係ありません。
星で終わるパスも同様です。この機能は、パスにパラメーターが含まれている場合は機能しません。