15-5 Gateway核心之Predicate讲解及自定义演示


15-5 Gateway核心之Predicate讲解及自定义演示
先来做一次自定义让大家来感受一下
这里提前给大家准备好的一个类
15-5 Gateway核心之Predicate讲解及自定义演示
创建两个目录一个是conf、predicates
15-5 Gateway核心之Predicate讲解及自定义演示

15-5 Gateway核心之Predicate讲解及自定义演示

首先这里是有一个static的内部类
15-5 Gateway核心之Predicate讲解及自定义演示
前端是断言的名字,后面是断言的值
15-5 Gateway核心之Predicate讲解及自定义演示
上面的断言的值,谁来承载它呢?config里面的属性值来承载,我们是判断当前时间,有没有在写的时间之后,
15-5 Gateway核心之Predicate讲解及自定义演示
我们在这里定义一个after: 2019-12-12 在这个日期之后就被承载。
15-5 Gateway核心之Predicate讲解及自定义演示

15-5 Gateway核心之Predicate讲解及自定义演示
里面的泛型是Config类
15-5 Gateway核心之Predicate讲解及自定义演示

15-5 Gateway核心之Predicate讲解及自定义演示

有可能会有两个值,就是在这两个日期之间。这些请求都要进入我们的路由,
15-5 Gateway核心之Predicate讲解及自定义演示
假设第一个参数对应的是我们Config里面的Datetime
15-5 Gateway核心之Predicate讲解及自定义演示
哪一个对应的参数是datetime1哪一个对应的是2就是在下面这里去定义的
15-5 Gateway核心之Predicate讲解及自定义演示
假设我们还有一个datetim2 就在这后面多加一个参数。这里报错是因为我们用了singleton
15-5 Gateway核心之Predicate讲解及自定义演示

再换回来
15-5 Gateway核心之Predicate讲解及自定义演示

15-5 Gateway核心之Predicate讲解及自定义演示

下面就是我们具体的处理规则。先打印了config的内容,然后转换了日期格式。
15-5 Gateway核心之Predicate讲解及自定义演示
这里还是换成一个时间
15-5 Gateway核心之Predicate讲解及自定义演示
获取当前时间的毫秒值
15-5 Gateway核心之Predicate讲解及自定义演示
转成当前时间的毫秒值,然后两个时间做比较。大于毫秒值就返回true。小于等于就会返回false
15-5 Gateway核心之Predicate讲解及自定义演示
predicate本身是断言,在jdk8以后我们其实就有用到这部分断言了。结果返回的true和false就是断言的true和false。就是说当你返回true就表示路由被匹配到了。如果返回false就代表。路由没有被匹配到。
15-5 Gateway核心之Predicate讲解及自定义演示

启用断言

15-5 Gateway核心之Predicate讲解及自定义演示

15-5 Gateway核心之Predicate讲解及自定义演示
这样就启动好了
15-5 Gateway核心之Predicate讲解及自定义演示
为啥一定要用RoutePredicateFactory为结尾定义类呢?因为结尾之前的就是我们的key值。
15-5 Gateway核心之Predicate讲解及自定义演示

15-5 Gateway核心之Predicate讲解及自定义演示
15-5 Gateway核心之Predicate讲解及自定义演示

15-5 Gateway核心之Predicate讲解及自定义演示

改成2028年
15-5 Gateway核心之Predicate讲解及自定义演示

15-5 Gateway核心之Predicate讲解及自定义演示
没有跳转,应该是缓存的问题,可以看到后端的控制台都没有输出任何
15-5 Gateway核心之Predicate讲解及自定义演示
再换 一个地址,防止它缓存
15-5 Gateway核心之Predicate讲解及自定义演示

总结

这里有个Config类,需要入参,需要一个就定义一个,需要俩就定义俩,并提供getter和setter
15-5 Gateway核心之Predicate讲解及自定义演示
按你入参的顺序,分别给你匹配到你对应的属性里
15-5 Gateway核心之Predicate讲解及自定义演示
第一个参数就是你的第一入参的属性名
15-5 Gateway核心之Predicate讲解及自定义演示
紧接着这里写匹配逻辑,只要最终返回true就表示是成功的。
15-5 Gateway核心之Predicate讲解及自定义演示
还有个注意的点就是类名要以RoutePredicateFactory为结尾的。
15-5 Gateway核心之Predicate讲解及自定义演示



 

结束


上一篇:jpa之org.springframework.data.jpa.domain.Specification


下一篇:15-6 Gateway核心之Predicate源码分析及预定义断言介绍