Ktorの2.3.0からルーティング設定で正規表現が使えるようになったらしいので試してみたよ。
ルーティング設定で正規表現を使ってみる
お試しコード
ルーティング設定での正規表現の指定方法は、文字列ではなくkotlin.text.Regex
を指定してあげる形になります。
あとは、普段使い慣れた正規表現でマッチさせたいパスを表現してあげればOKです。
routing { get(Regex("[a-z]+")) { call.respondText("uri: ${call.request.uri}") } }
実行結果
正規表現にマッチするパスを指定すると、実装通りの結果がレスポンスで返って来ています。
curl -i http://localhost:8080/aaaaa HTTP/1.1 200 OK Content-Length: 11 Content-Type: text/plain; charset=UTF-8 uri: /aaaaa%
正規表現にマッチしないパスを指定すると、ルーティングの設定にマッチしないので404が返ってくることが確認できます。
curl -i http://localhost:8080/aaA HTTP/1.1 404 Not Found Content-Length: 0
パスパラメータで正規表現を使ってみる
お試しコード
パスパラメータとして正規表現を使いたい場合には、(?<パスパラメータの名前>正規表現)
をkotlin.text.Regex
に指定します。
下のコードの場合には、id
という名前で数値のみに限定したパスパラメータを定義しています。
routing { get(Regex("""(?<id>\d+)""")) { call.respondText("id: ${call.parameters["id"]}") } }
実行結果
パスパラメータにマッチする数字のみを指定すると、実装通りの結果がレスポンスで返って来ています。 正規表現を使った場合でも、パスパラメータの値を取得できていることもこれで確認できますね。
curl -i http://localhost:8080/123 HTTP/1.1 200 OK Content-Length: 7 Content-Type: text/plain; charset=UTF-8 id: 123%
パスパラメータの場合も、正規表現にマッチしないパスを指定すると404が返ってくることが確認できます。
curl -i http://localhost:8080/123a HTTP/1.1 404 Not Found Content-Length: 0
おわり。