spring evaluate expression (SpEL),如何强制它不解释某些特殊字符
spring evaluate expression (SpEL), how can I force it to not interprete some specials characteres
我正在使用 spring 工具 SpEL 来评估一些表达式。
表达式包含 HTML/css 程序生成的和一些要计算的变量。
<span style='font-family: 'Comic Sans MS';>TOTAL HT = totalItem </span>
其中 totalItem 是对象 Item 的成员;
部分示例:
Item item = new Item ("item", 1658);
String s = "<span style='font-family: 'Comic Sans MS';>TOTAL HT = totalItem </span>";
StandardEvaluationContext itemContext = new StandardEvaluationContext(item);
Expression exp = parser.parseExpression(s);
s2 = exp.getValue(itemContext, String.class);
问题在于 SpEL 会解释所有“'”和所有“;”。
所以我正在寻找一种方法来强制 SpEl 只解释我想要的特殊字符。
你应该转义这些字符而不是解释它们。
对于'
,像''
一样转义它们
你可以让 ;
保持原样。
这里有几点需要注意:
您需要传递 "'<span style=''font-total: ''Comic Sans MS'';>TOTAL HT = ' + #totalItem + ' </span>'"
才能获得该值。
以下代码以动态方式处理此问题,您需要处理特殊字符的 split
部分。
ExpressionParser parser = new SpelExpressionParser();
StandardEvaluationContext context = new StandardEvaluationContext();
String input = "<span style='font-totalItemfamily: 'Comic Sans MS';>TOTAL HT = 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));
我正在使用 spring 工具 SpEL 来评估一些表达式。
表达式包含 HTML/css 程序生成的和一些要计算的变量。
<span style='font-family: 'Comic Sans MS';>TOTAL HT = totalItem </span>
其中 totalItem 是对象 Item 的成员;
部分示例:
Item item = new Item ("item", 1658);
String s = "<span style='font-family: 'Comic Sans MS';>TOTAL HT = totalItem </span>";
StandardEvaluationContext itemContext = new StandardEvaluationContext(item);
Expression exp = parser.parseExpression(s);
s2 = exp.getValue(itemContext, String.class);
问题在于 SpEL 会解释所有“'”和所有“;”。
所以我正在寻找一种方法来强制 SpEl 只解释我想要的特殊字符。
你应该转义这些字符而不是解释它们。
对于'
,像''
一样转义它们
你可以让 ;
保持原样。
这里有几点需要注意:
您需要传递 "'<span style=''font-total: ''Comic Sans MS'';>TOTAL HT = ' + #totalItem + ' </span>'"
才能获得该值。
以下代码以动态方式处理此问题,您需要处理特殊字符的 split
部分。
ExpressionParser parser = new SpelExpressionParser();
StandardEvaluationContext context = new StandardEvaluationContext();
String input = "<span style='font-totalItemfamily: 'Comic Sans MS';>TOTAL HT = 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));