0

在下面的代码中,语言过滤条件是可选的,它可能包含数据或 null。如果它包含 null 意味着 dynamodb 会抛出一些错误。如何克服这一点?

Map<String,String> expressionAttributesNames = new HashMap<>(); expressionAttributesNames.put("#Language", "Language");

    Map<String,AttributeValue> expressionAttributeValues = new HashMap<>();
    //expressionAttributeValues.put(":type", new AttributeValue().withS("test1"));
    expressionAttributeValues.put(":name", new AttributeValue().withS("data part"));
    //expressionAttributeValues.put(":key", new AttributeValue().withS("xxx yyy"));
    expressionAttributeValues.put(":language", new AttributeValue().withS(null));
    
    DynamoDBQueryExpression<Sample> queryExpression = new DynamoDBQueryExpression<Sample>()
            .withKeyConditionExpression(keyConditionExpression)
            .withExpressionAttributeNames(expressionAttributesNames)
            .withExpressionAttributeValues(expressionAttributeValues)
            .withFilterExpression("#Language = :language"); List<Sample> tools = mapper.query(Sample.class, queryExpression); 

例外是,

ExpressionAttributeValues 包含无效值:提供的 AttributeValue 为空,必须恰好包含 key 支持的数据类型之一:语言(服务:AmazonDynamoDBv2;状态代码:400;错误代码:ValidationException;

4

1 回答 1

1

如果过滤器表达式是可选的,则仅当 for 的值不为空language时才应将其包含在查询中。language

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

List<Tools> tools = mapper.query(Sample.class, queryExpression); 
于 2018-11-26T14:52:21.323 回答