Forest Forest
💒 首页
  • v1.5.30
  • v1.5.28
  • 🎄 ForestX
🌰 案例
💖 支持
🛫 更新记录
🧢 开发团队
⚒️ 参与贡献
  • MaxKey - 业界领先的身份管理和认证产品 (opens new window)
  • Snowy - 国内首个国密前后端分离快速开发平台 (opens new window)
  • Eoapi - 一个开源、可拓展的 API 工具平台 (opens new window)
  • Gitee (opens new window)
  • Github (opens new window)
💒 首页
  • v1.5.30
  • v1.5.28
  • 🎄 ForestX
🌰 案例
💖 支持
🛫 更新记录
🧢 开发团队
⚒️ 参与贡献
  • MaxKey - 业界领先的身份管理和认证产品 (opens new window)
  • Snowy - 国内首个国密前后端分离快速开发平台 (opens new window)
  • Eoapi - 一个开源、可拓展的 API 工具平台 (opens new window)
  • Gitee (opens new window)
  • Github (opens new window)
  • 序言

    • 🎁 新手介绍
    • 📖 文档
    • 🌰 使用案例
    • 🕵️‍ 关于作者
    • 👨‍🎓 贡献者列表
  • 入门

    • 🎬 安装配置说明
    • 🏹 Springboot环境安装
    • 📐 Springboot环境配置
    • 🎯 Springboot环境使用
    • 🏹 Springboot3环境安装
    • 📐 Springboot3环境配置
    • 🎯 Springboot3环境使用
    • 🏹 Spring环境安装
    • 📐 Spring环境配置
    • 🎯 Spring环境使用
    • 🏹 Solon环境安装
    • 📐 Solon环境配置
    • 🎯 Solon环境使用
    • 🏹 原生Java环境安装
    • 📐 原生Java环境配置
    • 🎯 原生Java环境使用
    • 🧬 编程式接口
  • 配置项

    • 👜 Springboot环境配置项
    • 👝 Spring环境配置项
    • 👜 Solon环境配置项
    • 🎒 原生Java环境配置项
    • 📚 配置优先级/作用域
  • 声明式接口

    • 🧱 构建接口
    • 🍀 请求方法
    • 🚚 请求地址
    • 🎈 URL 参数
    • 🍭 请求头
    • 👔 请求体
    • 🍮 后端框架
    • 🧁 接口注解
    • 📬 接收数据
    • 🍛 数据转换
    • 🍓 成功/失败条件
    • 🍌 重试机制
    • 🥂 重定向
    • 🍔 Gzip解压
    • 🎂 日志管理
    • ⚽ 回调函数
    • 🍟 异步请求
    • 🛡️ HTTPS
    • 🍪 使用Cookie
    • 🛸 使用代理
    • 🍉 上传下载
    • 🚑 异常处理
  • 编程式接口

    • 请求API

      • 🚀 请求对象
      • 🚢 请求属性
      • ✨ 执行请求
      • 🎊 后端框架
      • 🎪 请求类型
      • 🔮 请求地址
      • 🧀 URL 参数
      • 🚅 请求头
      • 🚋 请求体
      • ⚓ 回调函数
      • 🚁 异步请求
      • 🥯 Cookie
      • 🍜 成功/失败条件
      • 🌶️ 重试机制
      • ⛵ 重定向
      • 🛰️ 请求代理
    • 响应API

      • 🌠 响应对象
      • ✒️ 读取数据
      • 🦋 响应状态码
      • 🏥 响应错误处理
      • 🎧 响应头
      • 🥞 Cookie
  • 模板表达式

    • 🍬 Hello World
    • 🍹 配置属性引用
    • 🍖 变量引用
      • 全局变量
      • 参数变量
      • 变量作用域
      • 变量优先级
      • 变量与配置属性引用的异同
    • 🥃 动态变量绑定
    • 🥗 参数序号引用
    • 🍍 引用对象属性
    • 🥝 调用对象方法
  • 高级特性

    • 🥪 拦截器
    • 🍏 自定义注解
    • 🍇 组合注解
    • 🥑 自定义转换器
  • v1.5.30文档
  • 模板表达式
公子骏
2022-07-01
目录

🍖 变量引用

模板表达式最原始的目的就是各种各样的数据动态绑定到HTTP请求的各个属性中,要完成这一步就要实现对外部数据的引用。

Forest的模板表达式提供了两种最基本的数据引用方式: 变量名引用、参数序号引用

如上面Hello World例子所示,表达式中可以直接引用@Var或 @DataVariable 所标注的变量名。除此之外也可以直接引用全局配置中定义的全局变量名。

# 全局变量

全局变量名可以在 yaml 配置文件中定义

forest:
  variables:
    a: foo
    b: bar
1
2
3
4

也可以在 properties 配置文件中定义

forest.variables.a=foo
forest.variables.b=bar
1
2

注意

无论是yaml配置文件还是properties配置文件,其定义的 Forest 全局变量必须定义在 forest.variables 之下,否则无法被引用到

我们在全局配置中定义了两个全局变量,分别为a和b。接着就可以在@Request中同时引用这两个变量。

@Request(url = "http://localhost:8080/{a}/{b}")
String send();
1
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

效果同上

友情提示

{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

当调用send("xxx", "yyy")时,产生的url值为:

    http://localhost:8080/xxx/yyy
1

# 变量作用域

[全局变量作用域] > [参数变量作用域]
1

全局变量作用域: 在整个项目都可以引用到

参数变量作用域: 只能在该变量所在的接口方法可以引用到

# 变量优先级

[参数变量优先级] > [全局变量优先级]
1

一般来说,变量作用域越大,则变量的优先级越小

如果在某个方法上有同名的参数变量和全局变量,则会取参数变量的值

# 变量与配置属性引用的异同

  1. 配置属性引用以井号(#)开头,如#{a}。变量引用以花括号包裹或者以美元符号($)开头的花括号包裹,如 {a}、${a}
  2. 配置属性只是简单的字符串,不能进行后续操作,而变量是可以当作类似java对象进行操作,某方法调用,和子属性访问
  3. 在配置文件(application.yml 或 application.properties)中定义的变量,必须在forest.variables下,否则引用不到
帮助我们改善此文档 (opens new window)
上次更新: 2023/03/13, 15:28:40
🍹 配置属性引用
🥃 动态变量绑定

← 🍹 配置属性引用 🥃 动态变量绑定→

Theme by Vdoing | Copyright © 2016-2023 公子骏 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式