If I want to parse/construct path nodes in routes ...
# http4k
b
If I want to parse/construct path nodes in routes as I descend the route tree, how do I accomplish that? E.g.
Copy code
routes(
  "/projects" bind routes(
    "/{projectId:\\d+}" bind { ... parse projectId here, yielding a RoutingHttpHandler that can access something constructed from the projectId ... }
  )
)
This pattern would be nested several more times:
/project/{projectId}/workspace/{workspaceId}/snippet/{snippetId}
, for instance
b
You can nest routes like this:
Copy code
val lensProjectId = <http://Path.int|Path.int>().of("projectId")
val lensWorkspaceId = <http://Path.int|Path.int>().of("workspaceId")
val lensSnippetId = <http://Path.int|Path.int>().of("snippetId")

val r = routes(
  "/projects" bind routes(
    "/{projectId:\\d+}" bind routes(
      "/workspaces" bind routes(
        "/{workspaceId:\\d+}" bind routes(
          "/snippets" bind routes(
            "/{snippetId:\\d+}" bind Method.GET to { request->
              val projectId = lensProjectId(request)
              val workspaceId = lensWorkspaceId(request)
              val snippetId = lensSnippetId(request)

              Response(Status.OK).body("projectId: $projectId, workspaceId: $workspaceId, snippetId: $snippetId")
            }
          )
        )
      )
    )
  )
)
Request:
Copy code
GET <http://localhost:8000/projects/123/workspaces/456/snippets/789>
should response
Copy code
HTTP/1.1 200 OK
Connection: close
Content-Length: 48
Date: Tue, 06 Dec 2022 02:03:52 GMT

projectId: 123, workspaceId: 456, snippetId: 789