使用Spring表达式语言(SpEL)解析泛型

使用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);