字面量表達式

SpEL 支援以下型別的字面表示式。

字串

字串可以用單引號(')或雙引號(")分隔。要在用單引號括起來的字串字面量中包含單引號,請使用兩個相鄰的單引號字元。同樣,要在用雙引號括起來的字串字面量中包含雙引號,請使用兩個相鄰的雙引號字元。

數字

數字支援使用負號、指數表示法和小數點。

  • 整數:intlong

  • 十六進位制:intlong

  • 實數:floatdouble

    • 預設情況下,實數使用 Double.parseDouble() 解析。

布林值

truefalse

Null

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();

// 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
© . This site is unofficial and not affiliated with VMware.