带有可选参数的 dynamodb 查询过滤器
dynamodb query filter with optional parameter
在下面的代码中,语言过滤条件是可选的,它是否可以包含数据或空值。如果它包含 null 意味着 dynamodb 抛出一些错误。如何克服这个问题?
Map expressionAttributesNames = new HashMap<>();
expressionAttributesNames.put("#语言", "语言");
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 为空,必须恰好包含键支持的数据类型之一:语言(服务:AmazonDynamoDBv2;状态代码:400;错误代码:ValidationException;
如果 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);
在下面的代码中,语言过滤条件是可选的,它是否可以包含数据或空值。如果它包含 null 意味着 dynamodb 抛出一些错误。如何克服这个问题?
Map
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 为空,必须恰好包含键支持的数据类型之一:语言(服务:AmazonDynamoDBv2;状态代码:400;错误代码:ValidationException;
如果 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);