demo:
test:
# hostport: httpbin.org:80
# hostport: localhost:5000
# uri: http://${test.hostport}
uri: lb://httpbin
spring:
jmx:
enabled: false
cloud:
gateway:
default-filters:
- PrefixPath=/httpbin
- AddResponseHeader=X-Response-Default-Foo, Default-Bar
routes:
# =====================================
# to run server
# $ wscat --listen 9000
# to run client
# $ wscat --connect ws://localhost:8080/echo
- id: websocket_test
uri: ws://localhost:9000
order: 9000
predicates:
- Path=/echo
# =====================================
- id: default_path_to_httpbin
uri: ${test.uri}
order: 10000
predicates:
- Path=/**
filters:
- AddRequestHeader=X-Request-Foo, Bar # ①
# =====================================
# ① 这一行配置被 spring 解析后会绑定到一个 FilterDefinition 对象。
# AddRequestHeader ,对应 FilterDefinition 中的 name 属性。AddRequestHeader为AddRequestHeaderGatewayFilterFactory 的类名前缀。
# X-Request-Foo, Bar ,会被解析成 FilterDefinition 中的 Map 类型属性 args。
# 此处会被解析成两组键值对,以英文逗号将=后面的字符串分隔成数组,key是固定字符串 _genkey_ + 数组元素下标,value为数组元素自身。
# =====================================
# 如此而言还搞明白了另一件事:那就是yml的解析方式
# yml里面的每一段或者没一句可能都对应了一个java写的实体类,最开始是那种碎片式的properties类,然后把yml里面的每一条都整理出来之后
# 那么多的碎片,一起送进工厂类里面去生产出需要的配置出来
# 从yml里面读取配置,然后封到一个Config里面去,然后把这个Config转化成Predicate
# =====================================
# 在这里统一记录一下predicates和filter
# predicates,这东西就是java8里面那个函数式编程的东西,无论你输入什么进入,最后返回true或者false的那个东西
# 用predicates可以在转发到路由之前进行判断,如果某些条件不匹配就直接终止这次匹配,用来做条件判断的
# 而filter是在匹配校验完成之后,无论如何都会被转发请求的时候,在请求发到对应的路由器之前或者从路由传回来之后,
# 对发过去或者发回来的结果进行添加或者修改的,这个是结果修正的
# 或者这么理解吧,predicates就是那个if条件判断,而filter是if判断完了之后的aop逻辑
1. yml格式的解析
首先解析出来的格式应该是这样的:
TestEntity{age=418,
name='Jack',
params={event=what's up, url=http://www.test.com},
favoriteBooks=[Gone with the wind, The Little Prince]
}
(初版)
首先有一个yml文件,然后有这么个解析器,自己写一个对应yml的javabean。
上面的javabean是程序里面写好的,的的确确,如果写的是spring的话那这个bean应该就在哪个包里面了。
那么变量类型从bean类里面就能读取出来了,顺着yml往下读取,读出一行来然后就去bean里面找对应的行,一行一行往里面填。
(第二版)
如此而言还搞明白了另一件事:那就是yml的解析方式
yml里面的每一段或者没一句可能都对应了一个java写的实体类,最开始是那种碎片式的properties类,然后把yml里面的每一条都整理出来之后
那么多的碎片,一起送进工厂类里面去生产出需要的配置出来
从yml里面读取配置,然后封到一个Config里面去,然后把这个Config转化成Predicate
2. yml的中文注释
yml读取中文似乎出问题,如果写了中文是不是那个#的解析就出什么问题了,不能正确读取值了?
反正把IDEA的设置改了就行,改成utf-8的。
![](https://img.haomeiwen.com/i10743979/6865b7d58e05f3c8.png)
网友评论