字面表达式

SpEL支持以下类型的字面表达式。

字符串

字符串可以用单引号(')或双引号(")括起来。要在单引号括起的字符串字面值中包含单引号,请使用两个相邻的单引号字符。类似地,要在双引号括起的字符串字面值中包含双引号,请使用两个相邻的双引号字符。

数字

数字支持使用负号、指数表示法和小数点。

  • 整数: intlong

  • 十六进制: intlong

  • 实数: floatdouble

    • 默认情况下,实数使用 Double.parseDouble() 进行解析。

布尔值

truefalse

空值

null

由于Spring表达式语言的设计和实现,字面数字始终以正数形式存储在内部。

例如,-2 在内部存储为正数 2,然后在评估表达式时被否定(通过计算 0 - 2 的值)。

这意味着无法表示等于Java中该类型数字的最小值的负字面数字。例如,在Java中,int 的最小支持值是 Integer.MIN_VALUE,其值为 -2147483648。但是,如果在SpEL表达式中包含 -2147483648,将会抛出异常,告知您无法将值 2147483648 解析为 int(因为它超过了 Integer.MAX_VALUE 的值,即 2147483647)。

如果需要在SpEL表达式中使用特定类型数字的最小值,可以引用相应包装类型的 MIN_VALUE 常量(例如 Integer.MIN_VALUELong.MIN_VALUE 等),或计算最小值。例如,要使用最小整数值:

  • T(Integer).MIN_VALUE — 需要 StandardEvaluationContext

  • -2^31 — 可与任何类型的 EvaluationContext 一起使用

以下清单显示了字面值的简单用法。通常,它们不会像这样单独使用,而是作为更复杂表达式的一部分,例如,在逻辑比较运算符的一侧使用字面值,或作为方法的参数。

  • Java

  • Kotlin

ExpressionParser parser = new SpelExpressionParser();

// 评估为 "Hello World"
String helloWorld = (String) parser.parseExpression("'Hello World'").getValue();

// 评估为 "Tony's Pizza"
String pizzaParlor = (String) parser.parseExpression("'Tony''s Pizza'").getValue();

double avogadrosNumber = (Double) parser.parseExpression("6.0221415E+23").getValue();

// 评估为 2147483647
int maxValue = (Integer) parser.parseExpression("0x7FFFFFFF").getValue();

boolean trueValue = (Boolean) parser.parseExpression("true").getValue();

Object nullValue = parser.parseExpression("null").getValue();
val parser = SpelExpressionParser()

// 评估为 "Hello World"
val helloWorld = parser.parseExpression("'Hello World'").value as String

// 评估为 "Tony's Pizza"
val pizzaParlor = parser.parseExpression("'Tony''s Pizza'").value as String

val avogadrosNumber = parser.parseExpression("6.0221415E+23").value as Double

// 评估为 2147483647
val maxValue = parser.parseExpression("0x7FFFFFFF").value as Int

val trueValue = parser.parseExpression("true").value as Boolean

val nullValue = parser.parseExpression("null").value