如何使用SpEL解析泛型表达式?
StandardEvaluationContext context = new StandardEvaluationContext();
ExpressionParser parser = new SpelExpressionParser();
String queryString = "new List<Integer>()";
Expression exp = parser.parseExpression(queryString);
List<Integer> list = (List<Integer>) exp.getValue(context);
它正在抛出异常。 SpEL允许解析任意表达式。 我在这里错过了什么?
org.springframework.expression.spel.SpelParseException: EL1050E:(pos 8): The arguments (...) for the constructor call are missing
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatConstructorArgs(InternalSpelExpressionParser.java:450)
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.maybeEatConstructorReference(InternalSpelExpressionParser.java:792)
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatStartNode(InternalSpelExpressionParser.java:507)
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatPrimaryExpression(InternalSpelExpressionParser.java:343)
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatUnaryExpression(InternalSpelExpressionParser.java:337)
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatPowerIncDecExpression(InternalSpelExpressionParser.java:293)
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatProductExpression(InternalSpelExpressionParser.java:272)
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatSumExpression(InternalSpelExpressionParser.java:255)
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatRelationalExpression(InternalSpelExpressionParser.java:210)
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatLogicalAndExpression(InternalSpelExpressionParser.java:198)
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatLogicalOrExpression(InternalSpelExpressionParser.java:186)
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatExpression(InternalSpelExpressionParser.java:146)
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.doParseExpression(InternalSpelExpressionParser.java:127)
at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:60)
at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:32)
at org.springframework.expression.common.TemplateAwareExpressionParser.parseExpression(TemplateAwareExpressionParser.java:76)
at org.springframework.expression.common.TemplateAwareExpressionParser.parseExpression(TemplateAwareExpressionParser.java:62)
答案 0 :(得分:1)
您可以使用Inline list SpEL功能:
StandardEvaluationContext context = new StandardEvaluationContext();
ExpressionParser parser = new SpelExpressionParser();
String queryString = "{1,2,3}";
Expression exp = parser.parseExpression(queryString);
List<Integer> list = (List<Integer>) exp.getValue(context);
int one = list.get(0);
或者,您可以在SpEL context。
中定义列表答案 1 :(得分:0)
SpEL太好了,不容忽视。所以我最终解决了这个问题如下:
由于Java类型的橡皮擦,跟随函数返回是否真的无关紧要 - DynamoDBQueryExpression&lt;使用者名称&gt;或DynamoDBQueryExpression&lt;对象&gt ;.两者在运行时都是相同的。
public class DynamoDBQueryExpressionGenerics {
public static DynamoDBQueryExpression<?> get(){
return new DynamoDBQueryExpression<Object>();
}
}
StandardEvaluationContext context = new StandardEvaluationContext();
context.setVariable("attr", prem);
String queryString = "T(DynamoDBQueryExpressionGenerics).get().withHashKeyValues(#attr)";
ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression(queryString);
DynamoDBQueryExpression<User> req = (DynamoDBQueryExpression<User>) exp.getValue(context);
System.out.println(req);
PaginatedList<User> r = mapper.query(User.class, req);
for(User u : r){
System.out.println("Query Expression : " + u.getFirstName() + " : " + u.getLastName());
}
答案 2 :(得分:0)
List<Integer> myList = new ArrayList<>(Arrays.asList(0, 1, 2, 3, 4, 5));
ExpressionParser parser = new SpelExpressionParser();
StandardEvaluationContext context = new StandardEvaluationContext(myList);
context.setVariable("myList", myList);
List<Integer> newList = parser.parseExpression("#myList").getValue(context, List.class);