Routes
import krop.all.*
Paths
A Path represents a pattern to match against the path
component of the request's URI. Paths
are created starting with Path.root
and then calling the /
method to add segments to the pattern. For example
Path.root / "user" / "create"
matches a request with the path /user/create
.
Capturing Path Segments
Use a Param to capture part of the path for later processing. For example
Path.root / "user" / Param.int / "view"
matches /user/<id>/view
, where <id>
is an Int
, and makes the Int
value available to the request handler.
Matching All Segments
A Path
will fail to match if the URI's path has more segments than the
Path
matches. So Path.root / "user" / "create"
will not match
/user/create/1234
. Use Segment.all
to match and ignore all the segments
to the end of the URI's path. For example
Path.root / "assets" / Segment.all
will match /assets/example.css
and /assets/css/example.css
.
To capture all segments to the end of the URI's path, use an instance of
Param.All
such as Param.vector
. So
Path.root / "assets" / Param.vector
will capture the remainder of the URI's path as a Vector[String]
.
A Path
that matches all segments is called a closed path. Attempting to add an
element to a closed path will result in an exception.
Path.root / Segment.all / "crash"
// java.lang.IllegalStateException: Cannot add a segment or parameter to a closed path.
//
// A path is closed when it has a segment or parameter that matches all remaining elements.
// A closed path cannot have additional segments of parameters added to it.
// at krop.route.Path.assertOpen(Path.scala:157)
// at krop.route.Path.$div(Path.scala:120)
// at repl.MdocSession$MdocApp.$init$$$anonfun$1(routes.md:41)