Spring EL调用方法报错:找不到Math类,求非字符串处理替代方案
解决Spring EL引用Math类报错的问题
错误原因
Spring EL默认会以当前根对象(此处为Car实例)作为上下文查找属性/方法,直接写Math会被误认为是Car类的属性,因此抛出property or field 'Math' cant be found on object Car的错误。
无需字符串截取的解决方案
Spring EL提供T()运算符用于引用Java类型的静态成员,通过显式指定Math类的全限定名来调用其静态方法。结合场景中regNumber为字符串类型的情况,先将其转为数值类型再处理:
// 正确的Spring EL表达式 String expressionString = "(T(java.lang.Math).abs(Long.parseLong(regNumber)) % 1000 == 345)";
说明
T(java.lang.Math):显式引用java.lang.Math类,让Spring EL识别到这是全局的Java类而非根对象的属性Long.parseLong(regNumber):将字符串类型的车牌号转为Long(避免整数溢出,适配更长的车牌号)% 1000:取数值的最后三位,与目标值345比较
如果你的Car类中regNumber本身定义为数值类型(如Long、Integer),可简化表达式:
String expressionString = "(T(java.lang.Math).abs(regNumber) % 1000 == 345)";
内容的提问来源于stack exchange,提问作者sabu
相关产品推荐
相关产品推荐

