``` object ParameterRouter { operator f...
# http4k
j
Copy code
object ParameterRouter {
        operator fun invoke(vararg list: Pair<Set<String>, HttpHandler>): HttpHandler {
            val routes = list.toList()
            return { request ->
                val supplied = request.uri.queries().map { p -> p.first }.toSet()
                routes.find { route -> route.first == supplied }
                    ?.let { it.second(request) }
                    ?: Response(Status.NOT_FOUND)
            }
        }
    }

    @Test
    fun `parameter router`() {
        val server = routes("/bob" bind ParameterRouter(
            setOf("q") to { Response(Status.OK).body("q") },
            setOf("lat", "lon") to { Response(Status.OK).body("lon") },
            setOf("id") to { Response(Status.OK).body("id") }
        ))
        assertThat(server(Request(Method.GET, "/bob").query("q", null)), allOf(hasStatus(Status.OK),hasBody("q")))
        assertThat(server(Request(Method.GET, "/bob").query("lat", null).query("lon", null)), allOf(hasStatus(Status.OK), hasBody("lon")))
        assertThat(server(Request(Method.GET, "/bob").query("id", null)), allOf(hasStatus(Status.OK),hasBody("id")))
        assertThat(server(Request(Method.GET, "/bob").query("lat", null)), hasStatus(Status.NOT_FOUND))
        assertThat(server(Request(Method.GET, "/bob").query("xx", null)), hasStatus(Status.NOT_FOUND))
    }