13

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

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

其中emp是 bean 的名称。这里名称可以为空,并且在调用name.toLowerCase()时我得到一个空指针异常。在这种情况下如何处理空值?我只需要调用toLowercase()非空值。

4

2 回答 2

33
"#emp.name != null ? #emp.name.toLowerCase().contains('hari') : null"

或者

"#emp.name != null ? #emp.name.toLowerCase().contains('hari') : false"

取决于您在缺少名称时想要返回的内容。

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

"#emp.name != null ? toLowerCase().contains('hari') : null"

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

name.toLowerCase().contains('Hari')

永远不会返回真(H 是大写)。

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

Expression expression = new SpelExpressionParser().parseExpression("#emp.name?:'no name found'");
value = expression.getValue(context, String.class).toLowerCase();
于 2012-07-23T12:18:06.190 回答
-1

你能把这个bean自动连接到你的班级吗?

就像是:

public class YourClass{ 
    @Autowire
    private Employee emp

    public boolean func(){
        if (emp.getName() != null){
            return emp.getName().toLowerCase().contains('Hari');
        }else{
            return false;
        }
    }
}
于 2012-07-23T11:47:47.390 回答