🍖 变量引用
模板表达式最原始的目的就是各种各样的数据动态绑定到HTTP请求的各个属性中,要完成这一步就要实现对外部数据的引用。
Forest的模板表达式提供了两种最基本的数据引用方式: 变量名引用、参数序号引用
如上面Hello World例子所示,表达式中可以直接引用@Var或 @DataVariable 所标注的变量名。除此之外也可以直接引用全局配置中定义的全局变量名。
# 全局变量
全局变量名可以在 yaml 配置文件中定义
forest:
  variables:
    a: foo
    b: bar
 1
2
3
4
2
3
4
也可以在 properties 配置文件中定义
forest.variables.a=foo
forest.variables.b=bar
 1
2
2
注意
无论是yaml配置文件还是properties配置文件,其定义的 Forest 全局变量必须定义在 forest.variables 之下,否则无法被引用到
我们在全局配置中定义了两个全局变量,分别为a和b。接着就可以在@Request中同时引用这两个变量。
@Request(url = "http://localhost:8080/{a}/{b}")
String send();
 1
2
2
调用send()方法后产生的url的值为:
    http://localhost:8080/foo/bar
 1
这里因为是全局变量,{a}和{b}的值分别来自全局配置中的变量a和b的值,也就是foo和bar,所以并不需要在方法中传入额外的参数。
也可以使用${a}、${b}来引用变量
@Request(url = "http://localhost:8080/${a}/${b}")
String send();
 1
2
2
效果同上
友情提示
{a}与${a}的区别请参见《{表达式} 与 ${表达式}》
# 参数变量
变量同样可以设置在接口方法的参数上
通过标注在形参上的@Var注解,来表示该参数是一个可以被字符串模板引用的 Forest 变量
@Var注解的value属性为变量名
@Request(url = "http://localhost:8080/{a}/{b}")
String send(@Var("a") String a, @Var("b") String b);
 1
2
2
当调用send("xxx", "yyy")时,产生的url值为:
    http://localhost:8080/xxx/yyy
 1
# 变量作用域
[全局变量作用域] > [参数变量作用域]
 1
全局变量作用域: 在整个项目都可以引用到
参数变量作用域: 只能在该变量所在的接口方法可以引用到
# 变量优先级
[参数变量优先级] > [全局变量优先级]
 1
一般来说,变量作用域越大,则变量的优先级越小
如果在某个方法上有同名的参数变量和全局变量,则会取参数变量的值
# 变量与配置属性引用的异同
- 配置属性引用以井号(
#)开头,如#{a}。变量引用以花括号包裹或者以美元符号($)开头的花括号包裹,如{a}、${a} - 配置属性只是简单的字符串,不能进行后续操作,而变量是可以当作类似java对象进行操作,某方法调用,和子属性访问
 - 在配置文件(
application.yml或application.properties)中定义的变量,必须在forest.variables下,否则引用不到 
帮助我们改善此文档  (opens new window)
  上次更新: 2024/12/26, 12:59:11