Spring boot 带有可选参数的dynamodb查询过滤器

Spring boot 带有可选参数的dynamodb查询过滤器,spring-boot,amazon-dynamodb,amazon-dynamodb-streams,dynamodb-queries,Spring Boot,Amazon Dynamodb,Amazon Dynamodb Streams,Dynamodb Queries,在下面的代码中,语言过滤条件是可选的,无论它是否包含数据或null。如果它包含null,则表示dynamodb抛出一些错误。如何克服这个问题 Map expressionAttributesNames=新HashMap; expressionAttributesNames.putLanguage,Language Map<String,AttributeValue> expressionAttributeValues = new HashMap<>();

在下面的代码中,语言过滤条件是可选的,无论它是否包含数据或null。如果它包含null,则表示dynamodb抛出一些错误。如何克服这个问题

Map expressionAttributesNames=新HashMap; expressionAttributesNames.putLanguage,Language

    Map<String,AttributeValue> expressionAttributeValues = new HashMap<>();
    //expressionAttributeValues.put(":docType", new AttributeValue().withS("cp"));
    expressionAttributeValues.put(":docName", new AttributeValue().withS("data part"));
    //expressionAttributeValues.put(":docKey", new AttributeValue().withS("xxx yyy"));
    expressionAttributeValues.put(":language", new AttributeValue().withS(null));

    DynamoDBQueryExpression<Tools> queryExpression = new DynamoDBQueryExpression<PuToolsbtools>()
            .withKeyConditionExpression(keyConditionExpression)
            .withExpressionAttributeNames(expressionAttributesNames)
            .withExpressionAttributeValues(expressionAttributeValues)
            .withFilterExpression("#Language = :language"); List<Toolsools> tools = mapper.query(Tools.class, queryExpression); 
例外是

ExpressionAttributeValues包含无效值:提供的AttributeValues为空,必须正好包含key:language Service:AmazonDynamoDBv2支持的数据类型之一;身份代码:400;错误代码:ValidationException

如果语言筛选器表达式是可选的,则仅当语言的值不为null时,才应将其包含在查询中

.
.
.
if (language != null) {
    queryExpression.withFilterExpression("#Language = :language");
    expressionAttributeValues.put(":language", new AttributeValue().withS(language));
    expressionAttributesNames.put("#Language", "Language");
}

List<Tools> tools = mapper.query(Pubtools.class, queryExpression);