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

 

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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值