spring求值表达式(SpEL),如何强制它不解释某些特殊字符

spring求值表达式(SpEL),如何强制它不解释某些特殊字符,spring,special-characters,expression-evaluation,Spring,Special Characters,Expression Evaluation,我正在使用spring工具SpEL计算一些表达式 表达式包含通过编程生成的HTML/css和一些要计算的变量 <span style='font-family: 'Comic Sans MS';>TOTAL HT &nbsp; = totalItem </span> TOTAL HT=totalItem”; StandardEvaluationContext itemContext=新的StandardEvaluationContext(项目); exp=pa

我正在使用spring工具SpEL计算一些表达式

表达式包含通过编程生成的HTML/css和一些要计算的变量

<span style='font-family: 'Comic Sans MS';>TOTAL HT &nbsp; = totalItem  </span>
TOTAL HT=totalItem”;
StandardEvaluationContext itemContext=新的StandardEvaluationContext(项目);
exp=parser.parseExpression;
s2=exp.getValue(itemContext,String.class);
问题是SpEL解释所有“'”和所有”;“


因此,我正在寻找一种方法,迫使SpEl只解释我想解释的特殊字符。

你应该转义这些字符,而不是解释它们

对于
,请像

你可以保持原样。

这里没有什么需要注意的:

您需要传递
“'TOTAL HT='+#totalItem+''”
以获取值

以下代码以动态方式处理此问题,您需要注意特殊字符的
split
part

        ExpressionParser parser = new SpelExpressionParser();
        StandardEvaluationContext context = new StandardEvaluationContext();

        String input = "<span style='font-totalItemfamily: 'Comic Sans MS';>TOTAL HT &nbsp; = totalItem  </span>";
        String variableToEvaluate = "totalItem";
        String[] splits = input.split(variableToEvaluate);

        boolean appendedValue = false;
        StringBuilder expressionBuilder = new StringBuilder();
        for (int i = 0; i < splits.length; i++) {
            if (appendedValue) {
                expressionBuilder.append("#");
                expressionBuilder.append(variableToEvaluate);
                expressionBuilder.append(" + ");

            }
            expressionBuilder.append('\'');
            expressionBuilder.append(splits[i].replace("'", "''"));
            expressionBuilder.append('\'');
            appendedValue = true;
            if (i + 1 != splits.length) {
                expressionBuilder.append(" + ");
            }
        }
        System.out.println(expressionBuilder.toString());
        context.setVariable(variableToEvaluate, 1);
        Expression exp = parser.parseExpression(expressionBuilder.toString());
        System.out.println(exp.getValue(context, String.class));
ExpressionParser=new-SpelExpressionParser();
StandardEvaluationContext=新的StandardEvaluationContext();

String input=“对不需要解释的字符进行转义。谢谢,这个示例非常适用。我在寻找一种摆脱“'”这个角色的方法。如果我理解了这一点,我可以用简单的引号将任何字符转义,对吗?谢谢你的回答,这个例子很有用,但我不知道我的变量的真实名称。通常要计算的字符串来自数据库。杰森·马什的回答更符合我的情况。
        ExpressionParser parser = new SpelExpressionParser();
        StandardEvaluationContext context = new StandardEvaluationContext();

        String input = "<span style='font-totalItemfamily: 'Comic Sans MS';>TOTAL HT &nbsp; = totalItem  </span>";
        String variableToEvaluate = "totalItem";
        String[] splits = input.split(variableToEvaluate);

        boolean appendedValue = false;
        StringBuilder expressionBuilder = new StringBuilder();
        for (int i = 0; i < splits.length; i++) {
            if (appendedValue) {
                expressionBuilder.append("#");
                expressionBuilder.append(variableToEvaluate);
                expressionBuilder.append(" + ");

            }
            expressionBuilder.append('\'');
            expressionBuilder.append(splits[i].replace("'", "''"));
            expressionBuilder.append('\'');
            appendedValue = true;
            if (i + 1 != splits.length) {
                expressionBuilder.append(" + ");
            }
        }
        System.out.println(expressionBuilder.toString());
        context.setVariable(variableToEvaluate, 1);
        Expression exp = parser.parseExpression(expressionBuilder.toString());
        System.out.println(exp.getValue(context, String.class));