在弹簧表达式语言中处理空值

2022-09-04 06:34:40

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

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

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


答案 1
"#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();

答案 2

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

像这样:

public class YourClass{ 
    @Autowire
    private Employee emp

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

推荐