Spring gateway使用一个lambda例子的说明

xiaoxiao2021-02-28  14

 

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

 

 

转载请注明原文地址: https://www.6miu.com/read-2100207.html

最新回复(0)