我试图使用Spring Expression Language解析表达式。
如果 myVariable
值设置为“first-name”(带连字符的值),则获取class.org.springframework.expression.spel.SpelParseException
。
ExpressionParser parser = new SpelExpressionParser();
String parsedDynamicVariablesValue = parser.parseExpression("#" + myVariable).getValue(stdContext, String.class);
如何用连字符解决问题?
答案 0 :(得分:1)
它没有那样工作,你试图解析#first-name
- 就像Java一样,你不能在变量名中使用连字符。
答案 1 :(得分:0)
我们可以在方括号内的表达式中用引号引起连字符或破折号。下面这样的东西会起作用。
String expressionString =“#{response.headers ['header-1']}”;
例如:
String response = "{\"response\":{\"headers\":{\"header-1\":\"header2\",\"header1\":\"header1\"},\"body\":{\"body\":\"body\"}}}";
String expressionString = "#{response.headers['header-1']}";
ExpressionParser parser = new SpelExpressionParser();
DefaultConversionService conversionService = new DefaultConversionService();
conversionService.addConverter(new Converter<JsonPropertyAccessor.ToStringFriendlyJsonNode, String>() {
public String convert(JsonPropertyAccessor.ToStringFriendlyJsonNode source) {
return source.toString();
}
});
StandardTypeConverter standardTypeConverter = new StandardTypeConverter(conversionService);
StandardEvaluationContext context = new StandardEvaluationContext();
context.setTypeConverter(standardTypeConverter);
JsonPropertyAccessor jsonPropertyAccessor = new JsonPropertyAccessor();
context.addPropertyAccessor(jsonPropertyAccessor);
context.setRootObject(response);
TemplateParserContext templateParserContext = new TemplateParserContext();
Expression expression = parser.parseExpression(expressionString, templateParserContext);
System.out.println(expression.getValue(context));
输出: 标头2