Java Routes API
Spring Cloud Gateway Server MVC uses the Spring WebMvc.fn RouterFunctions.Builder as the default way to create Routes, which are WebMvc.fn RouterFunction instances.
A RouterFunctions.Builder
instance is obtained by calling RouterFunctions.route()
import static org.springframework.web.servlet.function.RouterFunctions.route;
import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions.http;
class SimpleGateway {
@Bean
public RouterFunction<ServerResponse> getRoute() {
return route().GET("/get", http("https://httpbin.org")).build();
}
}
There are methods in RouterFunctions.Builder
for each HTTP methods (GET, POST, etc…) combined with a path predicate, such as /get
as above. The final parameter is the HandlerFilterFunction
, in this case HandlerFunctions.http()
. There are overloaded methods for each HTTP method for additional RequestPredicate
parameters as well as a generic route(RequestPredicate, HandlerFunction
) method for general use.
Gateway MVC implementation of RouterFunctions.Builder
Some advanced filters require some metadata to be added to request attributes. To accommodate this, there is a org.springframework.cloud.gateway.server.mvc.handler.GatewayRouterFunctions
class. GatewayRouterFunctions.route(String routeId) creates a `RouterFunctions.Builder
instance then adds a 'before' filter to add the routeId
as request metadata.
import static org.springframework.cloud.gateway.server.mvc.handler.GatewayRouterFunctions.route;
import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions.http;
class SimpleGateway {
@Bean
public RouterFunction<ServerResponse> getRoute() {
return route("simple_route").GET("/get", http("https://httpbin.org")).build();
}
}
Gateway MVC Handler Functions
Various RouterFunctions.Builder
methods require a HandlerFunction<ServerResponse>
. To create a route that is proxied by the MVC Gateway, HandlerFunction
implementations are supplied in org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions
. The most basic is the http()
HandlerFunction
. If a URI
is supplied as a parameter, that is the URI
used as the downstream target for sending the HTTP requests (as seen in the example above). If no parameter is passed, the function looks for a URI
in the org.springframework.cloud.gateway.server.mvc.common.MvcUtils.GATEWAY_REQUEST_URL_ATTR
request attribute. This allows for dynamic targets such as load balancing to set the URI
.