Spring SpEL Evaluator中&字符转义问题:报错求助
解决Spring SpEL中单个&字符导致的"missing expected character '&'"错误
我之前也踩过这个坑,给你捋清楚问题根源和具体解决办法:
为什么会出现这个报错?
SpEL解析器看到单个&时,会默认把它当成逻辑与运算符&&的开头,所以会期待紧接着出现第二个&,如果没有就会抛出"missing expected character '&'"错误。而你用反斜杠转义没用,是因为SpEL根本不支持用反斜杠来转义这类运算符字符。
分两种场景解决:
1. 你需要的是逻辑与运算
如果是不小心把&&写成了单个&,直接补全成&&就行——这是SpEL标准的逻辑与运算符,比如你表达式里的#PaymentType!=null&&!(#PaymentType).toString().isEmpty()就是正确写法,检查下表达式其他地方是不是漏了一个&。
2. 你需要的是普通字符&(比如在拼接的文本里)
这时候必须把包含&的内容放进单引号包裹的字符串常量里,让SpEL把它当成普通文本处理:
- 比如你要拼接
PaymentType & Amount,不能直接写,要写成'PaymentType & Amount' - 如果是在XML配置文件里使用这个表达式,还要额外处理XML的转义,把
&改成&,也就是写成'PaymentType & Amount',不然XML解析器会先报错。
针对你给出的表达式
看你贴的表达式里已经用了正确的&&,大概率是省略的ProductSearchStat...部分里出现了单个&字符。你只需要把那部分里包含&的文本用单引号括起来,就能解决问题。
内容的提问来源于stack exchange,提问作者Aman Kumar Sinha
相关产品推荐
相关产品推荐

