| This version is still in development and is not considered stable yet. For the latest stable version, please use Spring Framework 6.2.12! | 
The Elvis Operator
The Elvis operator (?:) is a shortening of the ternary operator syntax and is used in
the Groovy language. With the
ternary operator syntax, you often have to repeat a variable twice, as the following Java
example shows:
String name = "Elvis Presley";
String displayName = (name != null ? name : "Unknown");Instead, you can use the Elvis operator (named for the resemblance to Elvis' hair style). The following example shows how to use the Elvis operator in a SpEL expression:
- 
Java 
- 
Kotlin 
ExpressionParser parser = new SpelExpressionParser();
String name = parser.parseExpression("name ?: 'Unknown'").getValue(new Inventor(), String.class);
System.out.println(name);  // 'Unknown'val parser = SpelExpressionParser()
val name = parser.parseExpression("name ?: 'Unknown'").getValue(Inventor(), String::class.java)
println(name)  // 'Unknown'| The SpEL Elvis operator also treats an empty String like a  | 
| As of Spring Framework 7.0, the SpEL Elvis operator supports  For example, given the expression  | 
The following listing shows a more complex example:
- 
Java 
- 
Kotlin 
ExpressionParser parser = new SpelExpressionParser();
EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();
Inventor tesla = new Inventor("Nikola Tesla", "Serbian");
String name = parser.parseExpression("name ?: 'Elvis Presley'").getValue(context, tesla, String.class);
System.out.println(name);  // Nikola Tesla
tesla.setName("");
name = parser.parseExpression("name ?: 'Elvis Presley'").getValue(context, tesla, String.class);
System.out.println(name);  // Elvis Presleyval parser = SpelExpressionParser()
val context = SimpleEvaluationContext.forReadOnlyDataBinding().build()
val tesla = Inventor("Nikola Tesla", "Serbian")
var name = parser.parseExpression("name ?: 'Elvis Presley'").getValue(context, tesla, String::class.java)
println(name)  // Nikola Tesla
tesla.setName("")
name = parser.parseExpression("name ?: 'Elvis Presley'").getValue(context, tesla, String::class.java)
println(name)  // Elvis Presley| You can use the Elvis operator to apply default values in expressions. The following
example shows how to use the Elvis operator in a  This will inject the value of the system property named  |