spring gateway url 跳转的一段代码 参考官方demo地址
https://github.com/spring-cloud-samples/spring-cloud-gateway-sample/blob/master/src/main/java/com/example/demogateway/DemogatewayApplication.java
@Bean public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { //@formatter:off return builder.routes() .route("path_route", r -> r.path("/hello") .uri("http://www.163.com/")) .route("path_route_1", r -> r.path("/get") .uri("http://www.baidu.com/")) .build(); //@formatter:on }
这段代码使用了lambda表达式
使用代码跟踪 route() 函数
public Builder route(String id, Function<PredicateSpec, Route.Builder> fn) { Route.Builder routeBuilder = fn.apply(new RouteSpec(this).id(id)); add(routeBuilder); return this; }"path_route", r -> r.path("/hello")
.uri("http://www.163.com/") 这两个参数对应
String id, Function<PredicateSpec, Route.Builder> fn 这两个参数
可以看到 :
r -> r.path("/hello") .uri("http://www.163.com/")
这段代码 实现了 Function 接口的函数式接口
@FunctionalInterface public interface Function<T, R> { /** * Applies this function to the given argument. * * @param t the function argument * @return the function result */ R apply(T t);r 就是function<T,R> 里面的T,对应Function<PredicateSpec, Route.Builder> fn
就是 r = PredicateSpec , Route.Builder 对应R 是返回值
r.path("/hello") .uri("http://www.163.com/")
的返回值就是Route.Builder,下面是uri的方法 记得他是有个Route.Builder的返回值的
public Route.Builder uri(String uri) { return this.routeBuilder.uri(uri); }如果没有 return this.routeBuilder.uri(uri);
代码该改成 类似如下()
r -> { Route.Builder res = r.path("/hello") .uri("http://www.163.com/")...
return res ;
}
只是举个例子 只是说 要有返回值
以前看的一个带返回值的例子
filters.add(original -> { HttpHeaders filtered = new HttpHeaders(); original.entrySet().stream() .filter(entry -> !entry.getKey().toLowerCase().startsWith("sec-websocket")) .forEach(header -> filtered.addAll(header.getKey(), header.getValue())); return filtered; //记得出参和入参和接口里面方法保持一致即可 });