Amazon dynamodb DynamoDB:DynamoDB映射器为布尔值返回null
我在DynamoDB中映射了一个布尔值,如下所示-Amazon dynamodb DynamoDB:DynamoDB映射器为布尔值返回null,amazon-dynamodb,Amazon Dynamodb,我在DynamoDB中映射了一个布尔值,如下所示- @DynamoDBAttribute(attributeName = "isFlagged") public Boolean getFlagged() { return isFlagged; } 当我使用dynamoDB映射器查询表时,总是得到一个空值。所以我查阅了一些文档并添加了注释- @DynamoDBConvertedBool(DynamoDBConvertedBool.Format.true_fal
@DynamoDBAttribute(attributeName = "isFlagged")
public Boolean getFlagged() {
return isFlagged;
}
当我使用dynamoDB映射器查询表时,总是得到一个空值。所以我查阅了一些文档并添加了注释-
@DynamoDBConvertedBool(DynamoDBConvertedBool.Format.true_false)
@DynamoDBAttribute(attributeName = "isFlagged")
public Boolean getFlagged() {
return isFlagged;
}
我收到“无法取消插入属性”错误。我怎样才能解决这个问题
PS-我是DynamoDB初学者,感谢您的帮助。似乎DynamoDB中存储的数据格式有问题 首先,这是DynamoDB所期望的: 布尔值 布尔类型属性可以存储true或false 表中的检查数据实际上与此匹配。您是否有不具有“isFlagged”属性的项目?有些是空的吗 如果需要将空值/空值转换为布尔值,则需要实现自定义转换器,该转换器具有极其简单的接口:
// Converts between String (DynamoDB side) and Boolean (application side)
public class MyBooleanConverter implements DynamoDBTypeConverter<String, Boolean> {
// Add any checks/conversions you see fit:
@Override
// Convert to DynamoDB attribute
public String convert(Boolean object) {
return object.toString();
}
@Override
// Convert from DynamoDB attribute
public Boolean unconvert(String object) {
// Parse as you see necessary here
return Boolean.parse(object);
}
}
p.S.
如果方法名称与属性名称匹配,则无需指定属性名称:
@DynamoDBConvertedBool(converter = MyBooleanConverter.class)
public Boolean isFlagged() {
...
}
应该足够了。另外,boolean getter应该具有isX格式。似乎DynamoDB中存储的数据格式存在问题 首先,这是DynamoDB所期望的: 布尔值 布尔类型属性可以存储true或false 表中的检查数据实际上与此匹配。您是否有不具有“isFlagged”属性的项目?有些是空的吗 如果需要将空值/空值转换为布尔值,则需要实现自定义转换器,该转换器具有极其简单的接口:
// Converts between String (DynamoDB side) and Boolean (application side)
public class MyBooleanConverter implements DynamoDBTypeConverter<String, Boolean> {
// Add any checks/conversions you see fit:
@Override
// Convert to DynamoDB attribute
public String convert(Boolean object) {
return object.toString();
}
@Override
// Convert from DynamoDB attribute
public Boolean unconvert(String object) {
// Parse as you see necessary here
return Boolean.parse(object);
}
}
p.S.
如果方法名称与属性名称匹配,则无需指定属性名称:
@DynamoDBConvertedBool(converter = MyBooleanConverter.class)
public Boolean isFlagged() {
...
}
应该足够了。另外,布尔getter无论如何都应该具有isX格式。注释是:
@DynamoDBTypeConverted(converter=MyBooleanConverter.class)
返回布尔值.valueOf(对象)
其余的对我有用。注释是:
@DynamoDBTypeConverted(converter=MyBooleanConverter.class)
返回布尔值.valueOf(对象)
Rest为我工作。您需要添加注释
@DynamoDBTyped
@DynamoDBTyped(DynamoDBMapperFieldModel.DynamoDBAttributeType.BOOL)
@DynamoDBAttribute(attributeName = "isFlagged")
private boolean isFlagged;
您需要添加注释
@DynamoDBTyped
@DynamoDBTyped(DynamoDBMapperFieldModel.DynamoDBAttributeType.BOOL)
@DynamoDBAttribute(attributeName = "isFlagged")
private boolean isFlagged;
实际上,我在表中只有2条记录,它们都有值。因此,如果所有记录都有有效值,那么应该没有问题?只要您存储的数据能够被转换器正确解析就可以了。确保您的转换器存储它可以解析的数据,并且其他有权访问该表的应用程序以相同的格式生成数据。如果我的数据库属性为布尔值,并且java对象属性也为布尔值,则我不需要自定义转换器,对吗?还是我仍然需要一个自定义转换器?将getter名称更改为isX对我来说很有用。不知道为什么?事实上,我在表中只有2条记录,它们都有值。因此,如果所有记录都有有效值,那么应该没有问题?只要您存储的数据能够被转换器正确解析就可以了。确保您的转换器存储它可以解析的数据,并且其他有权访问该表的应用程序以相同的格式生成数据。如果我的数据库属性为布尔值,并且java对象属性也为布尔值,则我不需要自定义转换器,对吗?还是我仍然需要一个自定义转换器?将getter名称更改为isX对我来说很有用。想知道为什么吗?