字面量表达式
SpEL支持以下类型的字面量表达式。
String
字符串可以用单引号(')或双引号(")来标识。如果在被单引号括起来的字符串字面量中包含一个单引号,就需要使用两个连续的单引号字符。同样地,如果在被双引号括起来的字符串字面量中包含一个双引号,就需要使用两个连续的双引号字符。
数字
数字支持使用负号、指数表示法和小数点。
-
整数:
int或long -
十六进制:
int或long -
实数:
float或double- 默认情况下,实数使用
Double.parseDouble()进行解析。
- 默认情况下,实数使用
布尔值
true 或 false
空值(Null)
null
备注
由于Spring表达式语言(SpEL)的设计和实现,字面数值在内部总是以正数的形式存储。
例如,-2在内部被存储为正数2,然后在表达式求值时通过计算0 - 2来获取其负值。
这意味着无法表示Java中该类型数值的最小值。例如,Java中int类型支持的最小值是Integer.MIN_VALUE,其值为-2147483648。但是,如果在你使用的SpEL表达式中包含-2147483648,将会抛出一个异常,提示无法将2147483648解析为int类型(因为它超出了Integer.MAX_VALUE的值,即2147483647)。
如果你需要在SpEL表达式中使用某种类型的数值最小值,可以引用相应包装类的MIN_VALUE常量(如Integer.MIN_VALUE、Long.MIN_VALUE等),或者自己计算该类型的最小值。例如,要使用最小的整数值:
- T(Integer).MIN_VALUE —— 需要StandardEvaluationContext
- -2^31 —— 可以在任何类型的EvaluationContext中使用
以下列表展示了字面量的简单用法。通常,它们不会像这样单独使用,而是作为更复杂表达式的一部分——例如,在逻辑比较运算符的一侧使用字面量,或者作为方法的参数。
- Java
- Kotlin
ExpressionParser parser = new SpelExpressionParser();
// evaluates to "Hello World"
String helloWorld = (String) parser.parseExpression("'Hello World'").getValue();
// evaluates to "Tony's Pizza"
String pizzaParlor = (String) parser.parseExpression("'Tony''s Pizza'").getValue();
double avogadrosNumber = (Double) parser.parseExpression("6.0221415E+23").getValue();
// evaluates to 2147483647
int maxValue = (Integer) parser.parseExpression("0x7FFFFFFF").getValue();
boolean trueValue = (Boolean) parser.parseExpression("true").getValue();
Object nullValue = parser.parseExpression("null").getValue();
val parser = SpelExpressionParser()
// evaluates to "Hello World"
val helloWorld = parser.parseExpression("'Hello World'").value as String
// evaluates to "Tony's Pizza"
val pizzaParlor = parser.parseExpression("'Tony''s Pizza'").value as String
val avogadrosNumber = parser.parseExpression("6.0221415E+23").value as Double
// evaluates to 2147483647
val maxValue = parser.parseExpression("0x7FFFFFFF").value as Int
val trueValue = parser.parseExpression("true").value as Boolean
val nullValue = parser.parseExpression("null").value