This PR make the route declaration shorter and more readable, for example for Reactor website:
Instead of:
private static RouterFunction<?> routes() {
return route(GET("/docs/api/**"), request ->
status(FOUND).location(URI.create(request.path().replace("/docs/", "/old/"))).build())
.andRoute(GET("/docs/reference/**"), request ->
status(FOUND).location(URI.create(request.path().replace("/docs/", "/old/"))).build())
.andRoute(GET("/docs/raw/**"), request ->
status(FOUND).location(URI.create(request.path().replace("/docs/", "/old/"))).build())
.andRoute(GET("/docs/{dir}/api"), request ->
status(FOUND).location(URI.create(request.path().replace("api", "release"))).build())
.andRoute(GET("/core/docs/reference/**"), request ->
status(FOUND).location(URI.create("https://github.com/reactor/reactor-core/blob/master/README.md")).build())
.andRoute(GET("/core/docs/api/**"), request ->
status(FOUND).location(URI.create(request.path().replace("/core/docs/","/docs/core/release/"))).build())
.andRoute(GET("/netty/docs/api/**"), request ->
status(FOUND).location(URI.create(request.path().replace("/netty/docs/","/docs/netty/release/"))).build())
.andRoute(GET("/ipc/docs/api/**"), request ->
status(FOUND).location(URI.create(request.path().replace("/ipc/docs/", "/docs/ipc/release/"))).build())
.andRoute(GET("/ext/docs/api/**/test/**"), request ->
status(FOUND).location(URI.create(request.path().replace("/ext/docs/", "/docs/test/release/"))).build())
.andRoute(GET("/ext/docs/api/**/adapter/**"), request ->
status(FOUND).location(URI.create(request.path().replace("/ext/docs/", "/docs/adapter/release/"))).build())
.and(resources("/**", new ClassPathResource("static/")))
;
}
We can write:
private static RouterFunction<?> routes() {
return routeGet("/docs/api/**", request ->
status(FOUND).location(URI.create(request.path().replace("/docs/", "/old/"))).build())
.andRouteGet("/docs/reference/**", request ->
status(FOUND).location(URI.create(request.path().replace("/docs/", "/old/"))).build())
.andRouteGet("/docs/raw/**", request ->
status(FOUND).location(URI.create(request.path().replace("/docs/", "/old/"))).build())
.andRouteGet("/docs/{dir}/api", request ->
status(FOUND).location(URI.create(request.path().replace("api", "release"))).build())
.andRouteGet("/core/docs/reference/**", request ->
status(FOUND).location(URI.create("https://github.com/reactor/reactor-core/blob/master/README.md")).build())
.andRouteGet("/core/docs/api/**", request ->
status(FOUND).location(URI.create(request.path().replace("/core/docs/","/docs/core/release/"))).build())
.andRouteGet("/netty/docs/api/**", request ->
status(FOUND).location(URI.create(request.path().replace("/netty/docs/","/docs/netty/release/"))).build())
.andRouteGet("/ipc/docs/api/**", request ->
status(FOUND).location(URI.create(request.path().replace("/ipc/docs/", "/docs/ipc/release/"))).build())
.andRouteGet("/ext/docs/api/**/test/**", request ->
status(FOUND).location(URI.create(request.path().replace("/ext/docs/", "/docs/test/release/"))).build())
.andRouteGet("/ext/docs/api/**/adapter/**", request ->
status(FOUND).location(URI.create(request.path().replace("/ext/docs/", "/docs/adapter/release/"))).build())
.and(resources("/**", new ClassPathResource("static/")))
;
}
Also in Kotlin it provides for free a workaround for a limitation that forces to specify the lambda type, so instead of writing:
route(GET("/"), HandlerFunction { ok().body(fromObject("Hello Mix-IT!")) })
.andRoute(GET("/user/{id}"), HandlerFunction { req -> ok().body(fromObject(User(req.pathVariable("id").toLong(), "Robert"))) })
We can write:
routeGet("/", { ok().body(fromObject("Hello Mix-IT!")) })
.andRouteGet("/user/{id}", { req -> ok().body(fromObject(User(req.pathVariable("id").toLong(), "Robert"))) })
Comment From: sdeleuze
I deleted my fork branch for this outdated PR that is not relevant anymore.