Spring 3迁移至Spring 6:ExpressionEvaluationUtils替换方案咨询
替换Spring 3到Spring 6中
ExpressionEvaluationUtils.evaluate的方案 原来的代码依赖Spring内部过时的ExpressionEvaluationUtils类,该类在Spring 6中已被移除,同时旧的JSP EL API也已废弃,推荐使用Jakarta EE标准EL API(对应Spring 6依赖的Jakarta EE 9+)来替代,以下是具体实现:
替代代码
import jakarta.el.ExpressionFactory; import jakarta.el.ValueExpression; import jakarta.servlet.jsp.PageContext; // 替换原有的str = ExpressionEvaluationUtils.evaluate(...)代码 ExpressionFactory expressionFactory = ExpressionFactory.newInstance(); jakarta.el.ELContext elContext = pageContext.getELContext(); // 创建值表达式,指定表达式字符串和返回类型为Object ValueExpression valueExpr = expressionFactory.createValueExpression(elContext, str, Object.class); // 执行表达式求值 Object evalResult = valueExpr.getValue(elContext); // 处理空值,转为字符串 str = evalResult != null ? evalResult.toString() : "";
说明
- API选择原因:Jakarta EL API是JSP 2.1及以后的标准EL处理方式,完全替代了过时的
javax.servlet.jsp.el.ExpressionEvaluator,同时Spring 6基于Jakarta EE 9+,天然支持这套API,无需额外依赖。 - 功能等价性:这段代码和原
ExpressionEvaluationUtils.evaluate的功能完全一致——解析传入的EL表达式字符串,在当前JSP页面上下文(PageContext)中求值,最终转为字符串。 - 兼容性:如果传入的
str是普通字符串(非EL表达式),代码会直接返回原字符串,和原逻辑保持一致。
内容的提问来源于stack exchange,提问作者Thom
相关产品推荐
相关产品推荐

