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;
//记得出参和入参和接口里面方法保持一致即可
});