2012-07-23 66 views
7

空值我有使用弹簧表达式语言以下代码:手柄在弹簧表达式语言

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()以获取非空值。

+1

'toLowerCase()。包含( '哈日')'总是'FALSE' – OrangeDog 2017-09-19 15:45:35

回答

19
"#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') 

永远不会返回true(H为大写)。

或者,猫王是你的朋友?

Expression expression = new SpelExpressionParser().parseExpression("#emp.name?:'no name found'"); 
value = expression.getValue(context, String.class).toLowerCase(); 
+0

嗨,你的答案非常感谢。在我的情况下,员工是对象的集合。所以我需要从集合中获取名称。我尝试过使用“#emp。?[name!= null?toLowerCase()。contains('hari'):null]”,但它不起作用,并且我收到一条消息,指出EmployeeDto中不存在toLowercase方法,请你帮我解决这个问题。非常感谢 – user1293071 2012-07-23 13:30:45

+0

不确定您为什么试图使用集合选择。 “#emp ['name']!= null?#emp ['name']。toLowerCase()。contains('hari'):false” – 2012-07-23 21:07:01

+0

它工作正常,非常感谢您的支持,并帮助我找到解决方案 – user1293071 2012-07-25 04:05:36

0

你可以将这个bean自动装配到你的班级吗?

喜欢的东西:

public class YourClass{ 
    @Autowire 
    private Employee emp 

    public boolean func(){ 
     if (emp.getName() != null){ 
      return emp.getName().toLowerCase().contains('Hari'); 
     }else{ 
      return false; 
     } 
    } 
}