使用Spring表达式语言(SpEL)解析泛型 spring 使用Spring表达式语言(SpEL)解析泛型,spring,spring-data,spring-el,Spring,Spring Data,Spring El,如何使用SpEL解析泛型表达式 StandardEvaluationContext context = new StandardEvaluationContext(); ExpressionParser parser = new SpelExpressionParser(); String queryString = "new List<Integer>()"; Expression exp = parser.parseExpression(queryString); List< 如何使用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功能: 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); StandardEvaluationContext=新的StandardEvaluationContext(); ExpressionParser=new SpelExpressionParser(); 字符串queryString=“{1,2,3}”; Expression=parser.parseExpression(queryString); 列表=(列表)exp.getValue(上下文); int one=list.get(0); 或者,您可以在中定义列表。SpEL太好了,不能忽略。因此,我最终解决了这个问题,如下所示: 由于Java类型的橡皮擦,下面的函数是返回DynamoDBQueryExpression还是返回DynamoDBQueryExpression并不重要。两者在运行时是相同的 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()); } 公共类DynamoDBQueryExpressionGenerics{ 公共静态DynamoDBQueryExpression get(){ 返回新的DynamoDBQueryExpression(); } } StandardEvaluationContext=新的StandardEvaluationContext(); setVariable(“attr”,prem); String queryString=“T(DynamoDBQueryExpressionGenerics).get().withHashKeyValues(#attr)”; ExpressionParser=new SpelExpressionParser(); Expression=parser.parseExpression(queryString); DynamoDBQueryExpression req=(DynamoDBQueryExpression)exp.getValue(上下文); 系统输出打印项次(要求); PaginatedList r=mapper.query(User.class,req); 用于(用户u:r){ System.out.println(“查询表达式:“+u.getFirstName()+”:“+u.getLastName()); } listmylist=newarraylist(Arrays.asList(0,1,2,3,4,5)); ExpressionParser=new SpelExpressionParser(); StandardEvaluationContext=新的StandardEvaluationContext(myList); setVariable(“myList”,myList); List newList=parser.parseExpression(“#myList”).getValue(上下文,List.class); 我的用例有点不同。DynamoDBQueryExpression queryExpression=新的DynamoDBQueryExpression(),带有hashkeyvalues(carter);DynamoDBQueryExpression req=(DynamoDBQueryExpression)exp.getValue(context)@PremKumar然后使用:String queryString=“{}”代码>确定..这是我最简单的查询字符串。String queryString=“new DynamoDBQueryExpression().withHashKeyValues(#attr1)”;当没有涉及泛型时,它可以正常工作。e、 它工作得非常好。String deleteTableString=“new com.amazonaws.services.dynamodbv2.model.DeleteTableRequest().withTableName(#tableName)”@PremKumar SpEL不支持通用参数。 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()); } 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);