Spring Expression Language(SpEL)用法示例
如响应体:
BODY
"{...}":
"code": 200
"msg": "成功!"
"data":
"totalResources": 113
"badResources": 36
"fixedResources": 18
"assginableResources": 95
"goodResources": 41
"yesterday":
"date": "26日星期二"
"high": "高温 12℃"
"fx": "东北风"
"low": "低温 7℃"
"fl": "<![CDATA[4-5级]]>"
"type": "小雨"
"city": "杭州"
"aqi": null
"forecast":
0:
"date": "27日星期三"
"high": "高温 9℃"
"fengli": "<![CDATA[<3级]]>"
"low": "低温 6℃"
"fengxiang": "无持续风向"
"type": "小到中雨"
1:
"date": "28日星期四"
"high": "高温 10℃"
"fengli": "<![CDATA[<3级]]>"
"low": "低温 6℃"
"fengxiang": "东北风"
"type": "阴"
2:
"date": "3日星期天"
"high": "高温 11℃"
"fengli": "<![CDATA[3-4级]]>"
"low": "低温 3℃"
"fengxiang": "西北风"
"type": "阴"
"ganmao": "相对于今天将会出现大幅度降温,空气湿度较大,易发生感冒,请注意适当增加衣服。"
"wendu": "7"
表达式 | 含义 | 用法示例 | 获取值 |
---|---|---|---|
{表达式a}?:{表达式b} | 表示若表达式a为真(获取到的值不为null),则获取表达式a的值。否则获取表达式b的值。 | {$.data.city}?:{$.data.msg} | 杭州 |
{表达式a} 运算符 | 表示若表达式a值满足关系运算表达式,则值为true,反之为false | ({$.data.city} == "杭州" and {$.data.code} == 200) | true |
{表达式a}.?[变量条件b] | 表示获取从表达式a值中满足变量条件b的值。 | {$.data.forecast[*].type}.?[#this=="阴"] | ["阴","阴"] |
({表达式a} 条件1 and {表达式b} 条件2 ...) ? {表达式c}:{表达式d} | ”与“,表示若表达式a满足条件1且表达式b满足条件2(同时满足)时,则获取表达式c的值,否则获取表达式d的值。 | ({$.data.city} == "杭州" and {$.data.code} >=200) ? {$.data.city}:{$.data.msg} | 杭州 |
({表达式a} 条件1 or {表达式b} 条件2 ...)? {表达式c}:{表达式d} | "或",表示若表达式a满足条件1获表达式b满足条件2时,则获取表达式c的值,否则获取表达式d的值。 | ({$.data.city} != "杭州" or {$.data.code} >=200) ? {$.data.city}:{$.data.msg} | 杭州 |
!({表达式a} 条件1 and !({表达式b} 条件2) ...)? {表达式c}:{表达式d} | "非",表示若表达式a不满足条件1且表达式b不满足条件2时,则获取表达式c的值,否则获取表达式d的值。 | ({$.data.city} == "杭州" and !({$.data.code} >=1)) ? {$.data.city}:{$.data.msg} | 成功! |
用法示例:
1、三元运算符
表达式:{表达式a}?:{表达式b}
若表达式a为真(获取到的值不为null),则获取表达式a的值。否则获取表达式b的值。
示例:{$.data.city}?:{$.msg} 获取值为杭州
2、条件表达式if/else
表达式:
and:({表达式a} 条件1 and {表达式b} 条件2 ...) ? {表达式c}:{表达式d}
若表达式a满足条件1与表达式b满足条件2(同时满足)时,则获取表达式c的值,否则获取表达式d的值。
or:({表达式a} 条件1 or {表达式b} 条件2 ...)? {表达式c}:{表达式d}
若表达式a满足条件1获表达式b满足条件2时,则获取表达式c的值,否则获取表达式d的值。
not:({表达式a} 条件1 and !({表达式b} 条件2) ...)? {表达式c}:{表达式d}
若表达式a满足条件1与表达式b不满足条件2时,则获取表达式c的值,否则获取表达式d的值。
示例:
{$.code} >= 200 ? {$.data.city}:{$.msg} 获取值为杭州
({$.data.city} == "杭州" and {$.code} >=200) ? {$.data.city}:{$.msg} 获取值为杭州
({$.data.city} != "杭州" or {$.code} >=200) ? {$.data.city}:{$.msg} 获取值为杭州
({$.data.forecast}.size() >=5 and {$.code} >=1) ? {$.data.city}:{$.msg} 获取值为杭州
({$.data.city} == "杭州" and !({$.code} >=1)) ? {$.data.city}:{$.msg} 获取值为成功!
3、变量
始终定义变量#this并引用当前评估对象(解析非限定引用)。始终定义变量#root并引用根上下文对象。虽然#this可能会随着表达式的组件的评估而变化,但#root始终引用根。
表达式:{表达式a}.?[变量条件b]
表示获取从表达式a值中满足变量条件b的值。
{$.data.forecast[*].type}.?[#this=="阴"] 获取值为["阴","阴"]
{$.data.forecast[*].type}.?[#this=="阴"].size() 获取值为2
4、关系运算符
表达式:{表达式a} 运算符 {表达式b}... true/false 运算符支持等于、不等于、小于或小于等于、大于或大于等于,也支持基于正则表达式的运算符
若表达式a值或整体的表达式满足关系运算表达式,则值为true,反之为false。若表达式获取数值时为string类型,则需要转为Int进行计算。
示例:
{$.data.city}=="杭州" 获取值为true
({$.data.city} == "杭州" and {$.code} == 200) 获取值为true
{$.data.totalResources} > {$.data.assginableResources} 获取值为true
{$.data.assginableResources}+{$.data.fixedResources} 获取值为113
({$.data.assginableResources} + {$.data.fixedResources}) == {$.data.totalResources} 获取值为true
若返回值为string类型,则需要转Int,再进行逻辑运算:
new Integer({$.data.assginableResources}) + new Integer({$.data.fixedResources}) == new Integer({$.data.totalResources}) 获取值为true
未完待续~~