Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在spring表达式语言中处理空值_Java_Spring_Spring El - Fatal编程技术网

Java 在spring表达式语言中处理空值

Java 在spring表达式语言中处理空值,java,spring,spring-el,Java,Spring,Spring El,我使用spring表达式语言编写了以下代码: StandardEvaluationContext stdContext = new StandardEvaluationContext(); stdContext.setVariable("emp", filterInputData); ExpressionParser parser = new SpelExpressionParser(); parser.parseExpression("#emp.?[name.toLowerCase

我使用spring表达式语言编写了以下代码:

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

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

您能将这个bean自动关联到您的类吗

比如:

public class YourClass{ 
    @Autowire
    private Employee emp

    public boolean func(){
        if (emp.getName() != null){
            return emp.getName().toLowerCase().contains('Hari');
        }else{
            return 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();

嗨,非常感谢你的回答。在我的例子中,employee是对象的集合。所以我需要从集合中获取名称。我尝试使用“#emp.?[name!=null?toLowerCase().contains('hari'):null]”,但它不起作用,我收到一条消息,说EmployeeDto中不存在toLowerCase方法,请您帮助我解决此问题。许多人不知道你为什么要尝试使用集合选择。如果你的收藏是一张地图,这很好用。。。“#emp['name']!=null?#emp['name'].toLowerCase().contains('hari'):false”成功了,非常感谢您的支持并帮助我找到了一个解决方案感觉像
name?。toLowerCase()
也应该有帮助
toLowerCase()。contains('hari')
总是
false
name.toLowerCase().contains('Hari')
Expression expression = new SpelExpressionParser().parseExpression("#emp.name?:'no name found'");
value = expression.getValue(context, String.class).toLowerCase();