Spring表达式(SpEL) - Elvis运算符:无法从Integer转换为Boolean错误

时间:2016-10-17 12:35:53

标签: spring spring-el

我正在使用Spring表达式版本4.3.2.RELEASE 似乎我们不能将Elvis运算符用于除String和Boolean之外的任何其他类型。

例如,以下内容将抛出错误: 字段?:2> 0

  • 如果field = 1,我们得到 java.lang.ClassCastException:java.lang.Integer无法强制转换为java.lang.Boolean

  • 如果字段为空: 然后Elvis正常工作并使用值2.

我们可以解决这个问题吗?它是SpEL的缺陷吗?

感谢,

的Sebastien

2 个答案:

答案 0 :(得分:1)

Elvis运算符是三元运算符的简写符号,用于可空性检查。

它的语法是:

someField?:somevalue

其中,someField可以是任何类型。上面的表达式将返回someField (e.g. Integer)的值,如果它不是null,则它将返回someValue。 someValue必须与someField (Integer)类型相同。

所以,这不是SPel的限制。这是运营商的具体用法。

在您的示例中,field是一个整数,因此,已解析的值也必须是整数类型。但是,你正在做2>0解析为布尔类型,在这种情况下无效。

你可以做的是(field?: 2) > 0,如果这是你想要达到的目标。

我希望,它澄清了。

答案 1 :(得分:0)

这似乎是运营商优先问题。也许你的表达应该是(field ?: 2)>0

希望它有所帮助。