Как убежать от & персонажа весной Spel Evaluator
У меня есть выражение, которое содержит одиночный & и Spring Spel оценщик продолжает выдавать ошибку missing expected character '&'
Я попытался использовать обратную косую черту и двойную обратную косую черту, чтобы избежать его, но затем он выдал ошибку недопустимого символа escape.
Это мое выражение, которое мне нужно разобрать
(#PaymentType!=null&&!(#PaymentType).toString().isEmpty()?'PaymentType:'+((#PaymentType)+' ')+'$':'')+(#ProductSearchState!=null&&!(#ProductSearchState).toString().isEmpty()?'ProductSearchState:'+((#ProductSearchState)+' ')+'$':'')+(#Manufacturer_s39s_s32Name_s32_s38_s32Address!=null&&!(#Manufacturer_s39s_s32Name_s32_s38_s32Address).toString().isEmpty()?'Manufacturer's Name & Address:'+((#Manufacturer_s39s_s32Name_s32_s38_s32Address)+' '):'')
Ниже приведен код, который я использую для разбора выражения.
public static void main (String args[]) {
String expression="(#PaymentType!=null&&!(#PaymentType).toString().isEmpty()?'PaymentType:'+((#PaymentType)+' ')+'$':'')+(#ProductSearchState!=null&&!(#ProductSearchState).toString().isEmpty()?'ProductSearchState:'+((#ProductSearchState)+' ')+'$':'')+(#Manufacturer_s39s_s32Name_s32_s38_s32Address!=null&&!(#Manufacturer_s39s_s32Name_s32_s38_s32Address).toString().isEmpty()?'Manufacturer's Name & Address:'+((#Manufacturer_s39s_s32Name_s32_s38_s32Address)+' '):'')";
String g = expression;
System.out.println(g);
final Set<String> dependent = new HashSet<>();
try {
ExpressionParser parser = new SpelExpressionParser();
// log.info("Extracting dependent attributes for {} ", expression);
new SplExpressionVisitor<Void>() {
public void visit(SpelExpression expression) {
visitNode(expression.getAST());
}
@Override
protected Void visit(VariableReference node) {
final String variableReferenceName = getVariableReferenceName(node);
dependent.add(variableReferenceName);
return super.visit(node);
}
}.visit((SpelExpression) parser.parseExpression(expression));
}catch (Exception e){
System.out.println(e.toString());
}
}
1 ответ
Ваша строка 'Manufacturer's Name & Address:'
выглядит как строка 'Manufacturer'
сопровождаемый некоторой чепухой, поскольку вы не можете использовать одинарные кавычки как для разделения строки, так и внутри строки.
Вам нужно использовать два символа одинарных кавычек внутри строки, чтобы избежать этого, например:
'Manufacturer''s Name & Address:'
Обратитесь к разделу " Литеральные выражения" справочной документации по языку SpEL для получения дополнительной информации о включении литералов в ваши выражения.