处理spring表达式语言中的空值

use*_*071 12 java spring spring-el

我使用spring表达式语言有以下代码:

StandardEvaluationContext stdContext = new StandardEvaluationContext();
stdContext.setVariable("emp", filterInputData); 
ExpressionParser parser = new SpelExpressionParser();     
parser.parseExpression("#emp.?[name.toLowerCase().contains('Hari')]").getValue(stdContext);
Run Code Online (Sandbox Code Playgroud)

其中emp是bean的名称.这里的名称可以为null,并且在调用时name.toLowerCase()我得到一个nullpointer异常.如何处理此方案中的空值?我只需要调用toLowercase()非空值.

Gar*_*ell 24

"#emp.name != null ? #emp.name.toLowerCase().contains('hari') : null"
Run Code Online (Sandbox Code Playgroud)

要么

"#emp.name != null ? #emp.name.toLowerCase().contains('hari') : false"
Run Code Online (Sandbox Code Playgroud)

取决于缺少名称时想要回复的内容.

实际上,这个简短的形式也有效......

"#emp.name != null ? toLowerCase().contains('hari') : null"
Run Code Online (Sandbox Code Playgroud)

顺便说一下,在你原来的问题......

name.toLowerCase().contains('Hari')
Run Code Online (Sandbox Code Playgroud)

将永远不会返回true(H是大写).

或者,猫王是你的朋友......

Expression expression = new SpelExpressionParser().parseExpression("#emp.name?:'no name found'");
value = expression.getValue(context, String.class).toLowerCase();
Run Code Online (Sandbox Code Playgroud)